Nextjs를 github action, EC2, pm2로 CI/CD 구축하기(4)

CGH96·2023년 8월 10일
0

이제는 github action을 작성할 차례이다.
github action에서는 다음과 같은 동작을 작성할 것이다.

  1. Nextjs App 빌드하기
  2. Nextjs App 파일들을 압축해서 S3에 저장하기 - node_modules는 제외
  3. S3에 파일이 올라가면 CodeDeploy 트리거하기 - 동작을 정의한 것이 아님.

Github action은 프로젝트 root폴더에 .github/workflows폴더 안에서 작성해준다. 이때 파일 확장자는 yml이다.
어떤 동작을 하는지는 주석으로 작성했으니 vscode에 복붙해서 확인해보자.

name: deploy to S3

on:
  push:
    branches:
      - main

env:
  S3_BUCKET_NAME: chagok-bucket
  CODE_DEPLOY_APPLICATION_NAME: chagok-code-deploy
  CODE_DEPLOY_DEPLOYMENT_GROUP_NAME: chagok

jobs:
  build:
    runs-on: ubuntu-latest
    strategy:
      matrix:
        node-version: [18.x]

    steps:
      - name: Checkout
        uses: actions/checkout@v3
      - uses: actions/setup-node@v3
        with:
          node-version: ${{ matrix.node-version }}
          cache: "npm"

      - name: Install dependencies
        run: npm ci

      # 프로젝트 빌드
      - name: Build next app
        run: npm run build
      
	  # 프로젝트 압축
      - name: Make zip file
        run: zip -qq -r ./chagok.zip . -x "node_modules/*"
        # -qq: quit 모드로 실행 (에러나 경고메세지만 출력하도록 함)
        # -r: 지정된 디렉토리를 재귀적으로 압축 (하위 디렉토리와 파일들 모두 압축)
        # -x "node_modules/*": node_modules 폴더 제외
		
      # Github Action에서 AWS의 권한 자격을 얻어오는 단계
      - 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: ap-northeast-2

      # 압축된 파일을 S3에 업로드
      - name: Upload to S3
        run: aws s3 cp --region ap-northeast-2 ./chagok.zip s3://$S3_BUCKET_NAME/chagok.zip

      # S3에 업로드 된 빌드 파일을 이용해 CodeDeploy가 정의된 동작을 하도록 트리거
      - name: Code Deploy
        run: |
          aws deploy create-deployment \
          --application-name ${{ env.CODE_DEPLOY_APPLICATION_NAME }} \
          --deployment-config-name CodeDeployDefault.AllAtOnce \
          --deployment-group-name ${{ env.CODE_DEPLOY_DEPLOYMENT_GROUP_NAME }} \
          --s3-location bucket=$S3_BUCKET_NAME,bundleType=zip,key=chagok.zip

이렇게 하면 github action은 작성이 완료되었다.



레포지토리의 action탭에서 결과를 확인해보자 초록색 바탕의 체크 표시가 있다면 성공적으로 작동한 것이다. S3에서도 압축된 파일이 올라간 것을 확인 할 수 있다.



하지만 위에서 말했듯이 github action은 S3에 업로드하고 CodeDeploy를 트리거하는 역할이지 CodeDeploy의 동작을 정의하진 않았다. 다음 글에서 CodeDeploy의 동작을 정의할 것이다.

1개의 댓글

comment-user-thumbnail
2024년 6월 3일

혹시 깃헙 액션에서 프로젝트 빌드는 왜 하는 걸까요?
어차피, S3 에 코드들이랑 package.json 압축해놨다가
ec2 에서 NPM INSTALL 할거면 빌드하는 의미가 없는 것 같은데...

답글 달기