<aside> ☝ 8/24 21:17 업데이트
</aside>
안녕하세요. bmart-5 팀의 추연호 입니다.
이번 프로젝트에서 Github actions와 S3, CodeDeploy를 활용하여 EC2에 자동 배포하는 환경을 구축했는데, 삽질의 과정이 꽤나 고되고, 힘들었기 때문에 도입을 고민하시는 다른 팀들의 시간을 줄여드리고자 간단하게 글을 작성하려고 합니다.
참고로 저희 팀의 배포 방식은 프로젝트 전체를 압축해서 EC2에 업로드하는 방식인데, 빌드 결과물만이 아니라 풀스택 코드가 전체가 업로드 되는 방식이라 (node_modules
포함 용량이 150MB 이상) 최적화된 방법은 아닙니다. builld 결과물만 배포하거나, node_modules
를 캐싱하거나, 클라이언트와 서버를 분리해서 배포하는 등으로 팀별로 최적화하신다면 조금 더 가볍고 안정적으로 배포하실 수 있을 거라고 생각합니다.
그럼 제가 성공한 방법에 대한 간단한 Step by Step 튜토리얼 방식으로 진행해 보겠습니다..!
깊은 이해가 부족할 수 있습니다.
Github Action은 프로젝트에서 Actions > set up a workflow yourself
를 클릭하면 생성할 수 있습니다. Github Action에서는 Runners 라고 불리는 Github에서 제공하는 머신을 제공해주는데, 이 workflow를 생성해서 Runner가 프로젝트의 코드를 가지고 할 동작을 정의할 수 있습니다.
저희 팀의 workflow 파일입니다.
name: Build & Deploy
env:
PROJECT_NAME: bmart-5
on:
push:
branches:
- master
jobs:
build:
runs-on: ubuntu-18.04
steps:
- uses: actions/checkout@v2
- name: Use Node.js
uses: actions/setup-node@v1
with:
node-version: '14.x'
- name: Install Dependencies
run: |
yarn install
yarn install:client
yarn install:server
- name: Build
run: |
cd client
yarn build
cd ..
- name: Create env file
run: |
cd shared
touch .env
cat << EOF >> .env
${{ secrets.ENV }}
- name: Make tar file
run: tar -cpvzf ./$GITHUB_SHA.tgz *
shell: bash
- name: Configure AWS credentials
uses: aws-actions/configure-aws-credentials@v1
with:
aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }}
aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
aws-region: ap-northeast-2
- name: Upload to S3
run: |
aws s3 cp \\
--region ap-northeast-2 \\
./$GITHUB_SHA.tgz s3://bmart5-s3-bucket/$PROJECT_NAME/$GITHUB_SHA.tgz
- name: Code Deploy
run: aws deploy create-deployment --application-name bmart5-deploy --file-exists-behavior OVERWRITE --deployment-config-name CodeDeployDefault.OneAtATime --deployment-group-name bmart5-deploy-group --s3-location bucket=bmart5-s3-bucket,bundleType=tgz,key=$PROJECT_NAME/$GITHUB_SHA.tgz
name: Build & Deploy
on:
push:
branches:
- master
먼저 이 부분은, 이 workflow의 이름과, Runner가 trigger될 시점을 정의하는 곳입니다. master
브랜치에 push가 되었을 때 이 Build & Deploy
라는 workflow가 동작하는 것입니다.