관리 메뉴

밤 늦게까지 여는 카페

github action을 활용한 CD - CD 여기 있어요 본문

DevOps

github action을 활용한 CD - CD 여기 있어요

Jㅐ둥이 2022. 10. 13. 09:30

안녕하세요. 오늘은 github action을 활용해서 CD를 공부하려고 합니다.

CD가 뭔지 다시 설명해줄 수 있을까요?

CD는 Continuous Delivery의 약자로, 짧은 주기로 소프트웨어를 빠르게 개발하는 소프트웨어 공학적인 개념입니다.
CI와 쌍으로 사용되는 개념이라서 CI/CD로 사용되고는 합니다.

그러면 CD툴들은 어떤 기능을 제공할까요?

코드가 수정될 될 때마다 진행해야 하는 배포 과정을 자동화 시켜줍니다.
그런데 소프트웨어 배포가 무작정 자동화 시킬 수 있는 작업일까요?

제공하고 있는 API 혹은 사용하고 있는 API와의 호환성이 지켜져야 합니다.
이런 호환성 이외에도 테스트로 잡을 수 없는 버그들도 존재할 수 있습니다.

  • 서비스의 환경설정 값을 잘못 설정하는 등의 터무니 없는 실수가 종종 발생하더라구요...

그래서 CD 툴들은 카나리 배포, 그린/블루 배포 기법들을 통해서 잘못된 배포를 되돌리기도 합니다.

이번에는 이런 기법들까지는 공부하지 않고, 간단하게 웹앱의 배포 자동화까지만 공부해보도록 하겠습니다!

github action을 이용한 웹앱 배포 자동화


당연하게도 웹앱이 어떻게 배포되고 있는지에 따라서 자동화 스크립트도 천차만별일 것 입니다.

저는 S3의 정적 웹호스팅 기능을 이용해서 웹앱을 배포하고 있으니 S3와의 연동이 주된 과정이 될 것 입니다.

github action과 S3 연동하기

그러고 보니 github action을 CI/CD 플랫폼이라고 소개드렸던 것 기억나시나요?

마켓플레이스를 보시면 다른 개발자들이 공개한 수많은 플러그인들을 볼 수 있습니다.

수많은 github action 플러그인들!


여기서 S3와 연동 기능을 제공해주는 플러그인을 찾아보도록 하겠습니다.

S3 플러그인도 한 두개가 아니네요...

 

저에게 필요한 기능은 aws s3 sync 기능이므로 sync 기능을 제공해주는 플러그인을 찾겠습니다!

jakejarvis/s3-sync-action@master 이라는 플러그인을 사용했고, 다음과 같은 cd.yml 파일을 작성했습니다.

name: CD

on: push

jobs:
  deploy:
    if: github.event_name == 'push'
    name: CD
    runs-on: ubuntu-latest
    
    steps:
      - uses: actions/checkout@v3
      - uses: actions/setup-node@v3
        with:
          node-version: '16.13.2'
      
      - name: Install dependencies
        run: |
          npm install -g yarn
          yarn set version berry
          yarn install

      - name: Run build
        run: |
          yarn run build -- --release

      - uses: jakejarvis/s3-sync-action@master
        env:
          AWS_S3_BUCKET: ${{ secrets.AWS_S3_BUCKET }}
          AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }}
          AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
          AWS_REGION: 'ap-northeast-2'
          SOURCE_DIR: 'build'

 

이제 코드를 수정하고, github에 푸시합니다.

타이틀을 수정합니다!

다음처럼 workflow가 실행됩니다!

workflow가 이렇게 실행됩니다!

웹앱의 타이틀도 잘 수정되었네요 ㅎㅎ

웹앱이 잘 배포된 것을 확인할 수 있습니다.

 

github action을 이용한 웹앱 배포 자동화는 어떠셨나요?

개인적으로는 CD를 처음으로 적용하기에는 적당한 사이즈인 것 같습니다 :)

반응형