Post

GitHub Actions로 CD (Continuous Deployment) 설정하기

GitHub Actions를 사용하여 CD(Continuous Deployment) 파이프라인을 구축하는 방법을 상세히 설명

GitHub Actions로 CD (Continuous Deployment) 설정하기

소프트웨어 개발에서 지속적 배포(Continuous Deployment, CD) 는 검증된 코드를 자동으로 서버나 클라우드 환경에 배포하는 과정입니다. GitHub Actions를 활용하면 코드 변경 사항이 반영될 때마다 배포를 자동화할 수 있습니다.

1. CD(Continuous Deployment)란?

CD(지속적 배포) 개념

CD는 CI(Continuous Integration)를 거친 코드가 자동으로 프로덕션 환경에 배포되는 프로세스를 의미합니다. CI/CD를 함께 사용하면 개발부터 배포까지의 전체 과정을 자동화할 수 있습니다.

CD의 주요 목표

  • 빠르고 안정적인 배포
  • 자동화된 프로세스를 통한 배포 오류 최소화
  • 지속적인 업데이트 제공으로 사용자 경험 향상

CD와 GitHub Actions GitHub Actions를 사용하면 코드가 변경될 때마다 자동으로 빌드, 테스트 및 배포가 가능합니다.

2. GitHub Actions로 CD 설정하기

.github/workflows/ 폴더 생성

GitHub Actions에서 CD를 실행하려면 .github/workflows/ 폴더 내에 YAML 파일을 작성해야 합니다.

📁 프로젝트 구조 예시

1
2
3
4
5
6
📂 my-project/
├── 📂 .github/
│   └── 📂 workflows/
│       └── cd.yml  # CD 워크플로우 파일
├── 📂 src/
└── 📄 README.md

3. CD Workflow 작성하기

기본 CD Workflow 예제 (cd.yml)

아래는 GitHub Actions를 사용하여 CD를 설정하는 기본적인 Workflow 예제입니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
name: CD Workflow  # 워크플로우 이름

on:
  push:
    branches:
      - main  # main 브랜치에 코드가 푸시될 때 실행

jobs:
  deploy:
    runs-on: ubuntu-latest  # 실행 환경 지정
    steps:
      - name: Checkout Repository  # 코드 가져오기
        uses: actions/checkout@v4
      
      - name: Set up Node.js  # Node.js 환경 설정
        uses: actions/setup-node@v4
        with:
          node-version: '16'
      
      - name: Install dependencies  # 패키지 설치
        run: npm install
      
      - name: Build project  # 프로젝트 빌드
        run: npm run build
      
      - name: Deploy to Server  # 서버에 배포
        env:
          SSH_PRIVATE_KEY: $
        run: |
          echo "$SSH_PRIVATE_KEY" > private_key && chmod 600 private_key
          scp -i private_key -r ./dist user@server:/var/www/project
          ssh -i private_key user@server "systemctl restart nginx"

이 Workflow의 동작 방식

  1. main 브랜치에 코드가 푸시될 때 실행
  2. Ubuntu 환경에서 실행
  3. 저장소의 코드를 가져옴 (Checkout)
  4. Node.js 환경을 설정하고, 패키지를 설치
  5. 프로젝트를 빌드하고, 서버에 업로드
  6. 서버에서 Nginx를 재시작하여 반영

4. CD Workflow 상세 설명

Workflow 트리거 (on 속성)

CD Workflow가 실행되는 조건을 설정할 수 있습니다.

1
2
3
4
on:
  push:
    branches:
      - main
  • push: 코드가 특정 브랜치에 푸시될 때 실행됨
  • branches: [main]: main 브랜치에만 적용됨

Job과 실행 환경 (jobsruns-on)

1
2
3
jobs:
  deploy:
    runs-on: ubuntu-latest
  • 배포 작업을 수행하는 Job을 정의
  • runs-on을 사용하여 실행 환경을 지정 (예: ubuntu-latest)

Steps (단계별 실행 내용)

1) 저장소 코드 가져오기

1
2
- name: Checkout Repository
  uses: actions/checkout@v4

저장소의 코드를 가져와 CD 환경에서 사용할 수 있도록 합니다.

2) Node.js 환경 설정

1
2
3
4
- name: Set up Node.js
  uses: actions/setup-node@v4
  with:
    node-version: '16'
  • Node.js 16 버전을 설치하여 프로젝트를 빌드할 수 있도록 합니다.

3) 패키지 설치 및 빌드

1
2
3
4
5
- name: Install dependencies
  run: npm install

- name: Build project
  run: npm run build
  • 프로젝트의 의존성을 설치한 후, 빌드를 실행합니다.

4) 서버에 배포

1
2
3
4
5
6
7
- name: Deploy to Server
  env:
    SSH_PRIVATE_KEY: $
  run: |
    echo "$SSH_PRIVATE_KEY" > private_key && chmod 600 private_key
    scp -i private_key -r ./dist user@server:/var/www/project
    ssh -i private_key user@server "systemctl restart nginx"
  • GitHub Secrets를 사용하여 보안 키 관리
  • scp 명령어로 빌드된 파일을 서버에 업로드
  • ssh 명령어로 서버에서 Nginx를 재시작하여 변경 사항 반영

5. GitHub Secrets 설정

배포 과정에서 SSH 키를 안전하게 저장하려면 GitHub Secrets를 사용해야 합니다.

Secrets 설정 방법

  1. GitHub 저장소로 이동
  2. Settings → Secrets and variables → Actions 클릭
  3. New repository secret 클릭
  4. Name: SSH_PRIVATE_KEY, Value: 서버의 SSH 개인 키 입력

6. 마무리

GitHub Actions로 CD 설정을 정리하면?

  1. CD는 검증된 코드를 자동으로 서버에 배포하는 과정
  2. GitHub Actions의 .github/workflows/cd.yml을 설정하여 자동 배포 가능
  3. 배포 작업에는 코드 체크아웃, 환경 설정, 빌드, 서버 업로드 포함
  4. GitHub Secrets를 활용하여 보안 강화 가능
This post is licensed under CC BY 4.0 by the author.