이전에 travis, AWS code deploy 를 이용해 CI/CD 파이프라인을 구축해 본 경험이 있다.

또한 지난 프로젝트에서는 shell script를 이용해 CD 파이프라인을 구축해보며 그 원리를 파악했었다.

이번에는 한참 뜨고 있다는 Github Action을 이용해서 CI/CD 파이프라인 구축을 시도해 봤다.

Github action으로 CI/CD 파이프라인 구축하기

https://s3-us-west-2.amazonaws.com/secure.notion-static.com/b52d4299-9d7f-4518-aff1-49c3433dc8ca/Untitled.png

Github action tab

Github 저장소의 action탭으로 들어가면 아래와 같은 첫페이지가 나온다. 친절하게도 현재 repo가 어떤 project인지 인식하고 템플릿을 추천해준다.

Set up this workflow 버튼을 눌러서 시작하자.

기본 template은 아래와 같이 생겼다.

# Github action 기본 템플릿

name: CI

# 언제 이 스크립트가 실행되어야 하는지 설정해준다
on:
  push:
    branches: [ dev ]
  pull_request:
    branches: [ dev ]

# Workflow는 하나 이상의 job으로 구성된다.
# Job들은 순차적 또는 병렬적으로 실행시킬 수 있다
jobs:
  # 이하는 "build"라는 job에 대한 스크립트다
  build:
    # 이 Job을 실행할 환경을 설정해준다
    runs-on: ubuntu-latest

		# 하나의 job은 하나 이상의 step들로 구성된다
    steps:
		# 현재 실행중인 job이 $GITHUB_WORKSPACE의 저장소에 접근할 수 있도록 checkout 한다
    - uses: actions/checkout@v2

    # 한 줄짜리 명령어는 아래와 같이 실행시킨다
    - name: Run a one-line script
      run: echo Hello, world!

    # 두 줄 이상의 명령어는 아래와 같이 실행시킨다
    - name: Run a multi-line script
      run: |
        echo Add other actions to build,
        echo test, and deploy your project.

bmart-4 CI

name: CI

# dev 브랜치에 pr을 올리거나 push 했을 때 현재 스크립트(action)이 실행된다
on:
  push:
    branches: [ dev ]
  pull_request:
    branches: [ dev ]

jobs:
  build:
    runs-on: ubuntu-latest

    steps:
    - uses: actions/checkout@v2
    
		# client에 필요한 package들을 설치하고, test 코드를 실행시킨다
    - name: Client test suites
      run: |
        npm ci --prefix client/
        npm run test --prefix client/

bmart-4 CD

기본적으로 flow는 아래와 같다. 각 단계에 필요한 환경변수는 github secrets에 등록해두자.

  1. npm 패키지 설치
  2. 테스트 실행
  3. 클라이언트 빌드
  4. SSH로 서버에 접속해 구동중인 서버 중지
  5. SSH로 서버로 소스파일 전송