Github Action을 이용해 AWS Lightsail CI/CD 파이프라인 구축하기 2편

JJ·2023년 3월 3일
2

이번에야말로

목록 보기
4/4
post-thumbnail

서론

1편까지 Github Action과 Lightsail을 연결하기 위한 환경설정을 했다. 이번 편에서 실제로 Github Action에서 yml을 이용해 워크플로우를 만든뒤, Lightsail 인스턴스에 접근하고 배포를 자동화 해보자.

동작 방식

Github Action은 workflow를 실행하기 위해 러너라는 가상환경을 제공한다.

ci/cd에 개념에 대해서는 자세히 다루지 않겠다. 간단하게 설명하면 .yml형태로 작성된되는 workflow에서 Github 리포지토리에 모든 이벤트를 트리거 할 수 있다. 예를들어 누군가가 푸쉬, 커밋, PR 등 어떤 액션을 취하면 Github Action이 동작하게 된다.

나는 Main 브런치에 Push가 일어나면 AWS-Lightsail에 자동으로 배포가 되도록 설정했다.

workflow 코드를 작성해보자

  • 우선 main 브런치에 push가 일어나거나 pull_request요청이 오면 워크플로우가 실행되게 하였다.
  • 그리고 아까 발급받은 secret_key와 aws configure 정보를 .yml 파일의 환경변수로 등록해주었다.
name: CI CD

on:
  push:
    branches: ['main']
  pull_request:
    branches: ['main']

env:
  LIGHTSAIL_SSH_KEY: ${{ secrets.LIGHTSAIL_SSH_KEY }}
  LIGHTSAIL_HOST: ${{ secrets.LIGHTSAIL_HOST }}
  LIGHTSAIL_USERNAME: bitnami
  AWS_REGION: ap-northeast-2
  • 그리고 아래와 같이 jobs 를 등록해주었다.
  • 아래 내용은 다음과 같은 작업을 한다.
  1. 브런치로 체크아웃한다.
  2. 가상머신 러너에 nodejs를 설치한다.
  3. nodejs설치가 완료되었으면 프로젝트 디펜던시를 설치한다.
  4. 프로젝트를 빌드한다.
  5. 빌드파일이 생성되었는지 확인한다.
jobs:
  build:
    runs-on: ubuntu-latest

    steps:

      # 브런치로 체크아웃
      - name: 해당 브런치로 체크아웃
        uses: actions/checkout@v2

      # nodeJs를 설치합니다.
      - name: 노드 설치
        uses: actions/setup-node@v1
        with:
          node-version: 14

      # package.json의 dependencies 설치
      - name: 프로젝트 디펜던시 설치
        run: yarn

      # 프로젝트를 빌드합니다.
      - name: 프로젝트 빌드하기
        run: yarn build

      # 빌드 파일이 생성되었는지 확인합니다.
      - name: 빌드 파일 생성 체크
        run: ls -la
  • 이제 AWS-Lightsail에 연결할 차례이다.
  • 생성한 빌드파일을 AWS-Lightsail로 옮기고 pm2로 서버를 실행해보자.
...

      # AWS 인증을 시작합니다.
      - name: AWS 인증하기
        uses: aws-actions/configure-aws-credentials@v1
        with:
          aws-region: ${{ env.AWS_REGION }}
          aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }}
          aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}

      # AWS 인증이 완료되었는지 테스트합니다.
      - name: AWS Lightsail에 연결되었는지 확인
        run: aws configure list

      # 배포 자동화를 시작합니다.
      - name: 배포 자동화
        uses: appleboy/scp-action@master
        with:
          host: ${{ secrets.LIGHTSAIL_HOST }}
          username: ${{env.LIGHTSAIL_USERNAME}}
          key: ${{ secrets.LIGHTSAIL_SSH_KEY }}
          source: 'dist/*'
          strip_components: 1
          target: '/home/bitnami/{project-name}/dist'

      - name: Restart PM2 process
        uses: appleboy/ssh-action@master
        with:
          host: ${{ secrets.LIGHTSAIL_HOST }}
          username: ${{env.LIGHTSAIL_USERNAME}}
          key: ${{ secrets.LIGHTSAIL_SSH_KEY }}
          script: pm2 restart app
  • Github Actions에는 다양한 플러그인이 존재하는데 자기에게 알맞는 플러그인을 찾아서 잘 사용해보자.
  • 나는 aws-actions/configure-aws-credentials@v1를 사용해 AWS-Lightsail에 연결해주었다.
  • 그리고 nodejs 프로젝트를 빌드했을때 dist라는 폴더가 생성되는데 해당 폴더를 '/home/bitnami/{project-name}/dist' 이라는 폴더로 옮기는 작업을 실행한다.
  • 프로젝트를 Lightsail로 옮겼으면 해당 프로젝트를 실행하기 위해 pm2를 restart한다.
    • 나는 미리 Lightsail에 pm2를 셋팅해놓았다.

0개의 댓글