데브옵스/CI,CD

[Github Actions] 코드 수정,테스트,배포 자동화하는 방법

SparkIT 2025. 1. 18. 22:11

저는 간단한 웹 사이트를 개발하고 배포하면서 개발 공부를 진행중입니다. 이때 한 가지 불편한 점이 발생했는데요. 바로 코드의 수정이 일어날 때마다 배포를 하는 과정이 너무 귀찮다는 것입니다. 코드를 수정하고 이를 실제 배포 환경에 적용하는 과정은 반복 작업이기에 자동화를 할 수 있으면 자동화하는 것이 효율적이라고 생각합니다. 이런 과정은 보통 CI/CD(지속적인 통합 및 배포)라고 부릅니다. 오늘은 제가 간단하게 구성해본 Github Actions를 활용한 CI/CD 파이프라인에 대한 내용을 공유하겠습니다.

 


Github Actions 개념 및 용어

github actions는 github에서 무료로 제공하는 CI/CD 툴입니다. yaml 파일을 통해 CI/CD 관련 설정을 관리할 수 있습니다. 이때 yaml 파일에서 사용되는 설정 관련 용어들은 다음과 같습니다.

 

 ✅ Workflow : 워크플로

워크플로는 자동화된 CI/CD 프로세스 단위입니다하나의 CI/CD 파이프라인을 생성하면 이를 하나의 워크플로라고 부르는 것입니다. 해당 워크플로는 github 레포지토리의 루트 경로 .github/workflows 경로에 위치하게 됩니다.

 

✅ Event: 이벤트

워크플로를 실행하기 위한 트리거 역할을 이벤트라고 합니다. 예를 들어 특정 레포지토리에 push 이벤트가 발생하면 이 워크플로를 실행시켜줘! 라고 설정할 수 있죠.

 

✅ Jobs: 작업

잡은 워크플로 안에서 실행되는 행위들의 묶음 단위입니다. 동일한 (Job) 하위에서 실행되는 각 단계들은 동일한 환경에서 실행됩니다. 또한 여러 잡(Job)들을 병렬로 따로따로 실행될 수 있습니다. 이때 yaml 파일 설정에서 needs 키워드를 이용해 Job들이 종속성(선후 관계)을 가져 직렬로 실행될 수도 있습니다.

 

✅ Runners: 실행기

runners(실행기)는 잡(Job)을 실행하는 서버를 의미합니다. 하나의 runner 하위에서는 하나의 Job만 실행할 수 있습니다. 

 

 

위 용어들의 관계를 잘 요약한 이미지입니다.

githun actions 공식 홈페이지 워크플로 설명 이미지

 

 

 

YAML 파일 예제

각 부분에 대한 주석을 통해 쉽게 이해할 수 있습니다.

name: CI/CD

on:
  push:
    branches: [ "master" ]
  pull_request:
    branches: [ "master" ]

jobs:
  test-build:
    runs-on: ubuntu-latest

    steps:
    # 1단계: 코드 체크아웃
    - name: Checkout code
      uses: actions/checkout@v4

    # 2단계: Node.js 설치 (yarn을 사용)
    - name: Set up Node.js
      uses: actions/setup-node@v4
      with:
        node-version: '18.20.4'

    # 3단계: yarn 설치
    - name: Install dependencies
      run: yarn install

    # 4단계: 테스트 실행
    - name: Run tests
      run: yarn test

    # 5단계: 빌드 실행
    - name: Build project
      run: yarn build


  deploy:
 	# test-build Job이 우선 실행된 후 실행되어야함
    needs: test-build
    runs-on: ubuntu-latest

    steps:
    # 1단계: 코드 체크아웃
    - name: Checkout code
      uses: actions/checkout@v4
        
    # 2단계: EC2 서버로 배포 실행
    - name: Deploy to EC2
      uses: appleboy/ssh-action@v0.1.6
      with:
        # 환경변수값들은 Github - Settings - Secret 에서 설정 가능
        host: ${{ secrets.EC2_HOST }}
        username: ${{ secrets.EC2_USERNAME }}
        key: ${{ secrets.EC2_PRIVATE_KEY }}
        port: 22
        script: |
          git pull origin master
          yarn install
          nest start

 

위 yaml 파일은 최대한 단순하게 작성해본 yaml 파일입니다. 각자의 상황에 맞게 파일을 수정하면 됩니다.