인프라 구성도
저번 시간에 이어 Github Actions를 설정하고 workflow 파일을 작성하겠습니다.
Github Actions에 Secret 설정하기
Github 레포지토리의 Settings > Secrets and variables > Actions 탭을 선택하고 New repository secret을 선택합니다.
이전에 S3에 접근하기 위해 생성한 사용자 정보와 데이터베이스 정보와 OAuth 정보를 등록합니다.
Workflow 파일 작성하기
프로젝트 디렉토리에 .github/workflows/workflow.yml 파일을 생성합니다. 파일명은 사실 아무거나 괜찮다고 합니다.
name: Deploy NestJs Application
on:
push:
branches: [ release ]
pull_request:
branches: [ release ]
workflow_dispatch:
jobs:
build:
runs-on: ubuntu-20.04
steps:
- name: Checkout Repository
uses: actions/checkout@v3
- name: Setup Node.js 18.12.1
uses: actions/setup-node@v3
with:
node-version: 18.12.1
cache: 'npm'
- name: Install Dependencies
run: npm install
- name: Create .env file
run: |
jq -r 'to_entries | map(select(.key != "AWS_ACCESS_KEY_ID" and .key != "AWS_SECRET_ACCESS_KEY")| "\(.key)=\(.value|tostring))" | .[]' <<< "$SECRETS_CONTEXT" > .env
env:
SECRETS_CONTEXT: ${{ toJson(secrets) }}
- name: Build a Nest Application
run: npm run build
shell: bash
- name: Make a zip file
run: zip -r ./${{ env.PROJECT_NAME }}.zip . -x "node_modules/*" "coverage/*" "src/*" "test/*" "README.md" "*.git*"
shell: bash
- name: Configure AWS credentials
uses: aws-actions/configure-aws-credentials@v2
with:
aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }}
aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
aws-region: ${{ env.REGION }}
- name: Upload to S3
run: aws s3 cp --region ${{ env.REGION }} ./${{ env.PROJECT_NAME }}.zip s3://${{ env.S3_BUCKET_NAME }}/${{ env.PROJECT_NAME }}/${{ env.PROJECT_NAME }}.zip
- name: Request Deployment
run: aws deploy create-deployment --application-name ${{ env.AWS_CODEDEPLOY_APPLICATION_NAME }} --deployment-config-name CodeDeployDefault.AllAtOnce --deployment-group-name ${{ env.AWS_CODEDEPLOY_DEPLOYMENT_GROUP_NAME }} --s3-location bucket=${{ env.S3_BUCKET_NAME }},bundleType=zip,key=${{ env.PROJECT_NAME }}/${{ env.PROJECT_NAME }}.zip
env:
REGION: ap-northeast-2
# S3 버킷 이름
S3_BUCKET_NAME: <버킷 이름>
# S3 버킷 내 디렉토리 이름
PROJECT_NAME: <디렉토리 이름>
# CodeDeploy 애플리케이션 이름
AWS_CODEDEPLOY_APPLICATION_NAME: <CodeDeploy 애플리케이션 이름>
# CodeDeploy 배포 그룹 이름
AWS_CODEDEPLOY_DEPLOYMENT_GROUP_NAME: <CodeDeploy 배포 그룹 이름>
name만으로 충분히 어떤 일을 하는지 이해되실거라 생각됩니다.
여기까지 진행했다면 release 브랜치에 push 혹은 merge 하여 정상 작동하는지 확인해 주세요. S3에 업로드되는지도 확인해 주시고요.
Actions탭에서 빌드 진행 로그를 확인할 수 있으니 문제가 있다면 로그를 보고 수정해 주세요.
728x90
'DevOps > AWS' 카테고리의 다른 글
[WAF] NestJS 애플리케이션 AWS에 배포하기 08 (0) | 2023.04.25 |
---|---|
[CodeDeploy] NestJS 애플리케이션 AWS에 배포하기 07 (0) | 2023.03.31 |
[RDS] NestJS 애플리케이션 AWS에 배포하기 04 (0) | 2023.03.19 |
[ALB, EC2] NestJS 애플리케이션 AWS에 배포하기 03 (0) | 2023.03.17 |
[VPC, Subnet] NestJS 애플리케이션 AWS에 배포하기 02 (0) | 2023.03.16 |