1편까지 Github Action과 Lightsail을 연결하기 위한 환경설정을 했다. 이번 편에서 실제로 Github Action에서 yml을 이용해 워크플로우를 만든뒤, Lightsail 인스턴스에 접근하고 배포를 자동화 해보자.
Github Action은 workflow를 실행하기 위해 러너라는 가상환경을 제공한다.
ci/cd에 개념에 대해서는 자세히 다루지 않겠다. 간단하게 설명하면 .yml형태로 작성된되는 workflow에서 Github 리포지토리에 모든 이벤트를 트리거 할 수 있다. 예를들어 누군가가 푸쉬, 커밋, PR 등 어떤 액션을 취하면 Github Action이 동작하게 된다.
나는 Main 브런치에 Push가 일어나면 AWS-Lightsail에 자동으로 배포가 되도록 설정했다.
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:
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 인증을 시작합니다.
- 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
dist
라는 폴더가 생성되는데 해당 폴더를 '/home/bitnami/{project-name}/dist'
이라는 폴더로 옮기는 작업을 실행한다.