저는 간단한 웹 사이트를 개발하고 배포하면서 개발 공부를 진행중입니다. 이때 한 가지 불편한 점이 발생했는데요. 바로 코드의 수정이 일어날 때마다 배포를 하는 과정이 너무 귀찮다는 것입니다. 코드를 수정하고 이를 실제 배포 환경에 적용하는 과정은 반복 작업이기에 자동화를 할 수 있으면 자동화하는 것이 효율적이라고 생각합니다. 이런 과정은 보통 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만 실행할 수 있습니다.
위 용어들의 관계를 잘 요약한 이미지입니다.
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 파일입니다. 각자의 상황에 맞게 파일을 수정하면 됩니다.
'데브옵스 > CI,CD' 카테고리의 다른 글
[Github] Git 기본 용어 및 명령어 모음 (0) | 2025.02.18 |
---|---|
무중단 배포 구조 설계해보기( 블루 그린, 롤링, 카나리 배포 ) (0) | 2025.01.30 |
[Github] Github 사용방법 - 커밋 충돌 (0) | 2025.01.23 |
[Github] Github 사용방법 - 브랜치 전략 (0) | 2025.01.22 |
[GitHub] private 레퍼지토리 clone 하기 (0) | 2024.12.31 |