ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 7. NestJs & Git Actions CI/CD - [ AWS EC2 배포 ] - 자동배포 (1)
    공부하기/node.js 2023. 2. 3. 20:44

    [AWS EC2 배포] - 기본편에서  발생한 문제점 3번을 해결하는 글입니다

    지금까지 저는 [ 작업 코드를 레파지토리에 푸쉬 -> ec2 인스턴스에 접근 -> pm2를 사용한 재배포 -> nginx 재실행 ]등의 작업들을 수동으로 진행했습니다.

    이러한 귀찮고 반복적인 작업들을 자동화할 생각입니다.

    이번 글에서는 git actions를 통해 s3 버킷에 build된 zip파일을 올리는것까지 자동으로 만들어보겠습니다.

     

     

     

    준비물

      1. s3 버킷 => build 된 애플리케이션.zip 파일을 업로드하기 위해서 필요합니다.

      2. IAM 유저 (S3FullAccess 권한, CodeDeployFullAccess 권한) => git actions로 s3, codeDeploy를 컨트롤하기 위해서 필요합         니다.

      3. CodeDeploy => 작업물을 자동배포하기 위해 필요합니다.

      4.git actions => build , test, zip 파일 업로드, codeDeploy 컨트롤에 필요합니다.

     

     

    s3 버킷 생성

     

    1. aws s3 페이지로 이동한 후 버킷 만들기 버튼을 클릭합니다.


    2. 버킷 이름, 리전, acl 비활성화, 모든 퍼블릭 엑세스 차단 등을 설정 후 버킷을 생성합니다.


    IAM 유저 생성

     

    1. IAM 페이지에 접속 -> 사이드바_사용자 클릭 -> 사용자 추가 버튼을 클릭


    2. 사용자 이름을 입력 -> 다음 버튼 클릭


    3. S3FullAccess, CodeDeployFullAccess 권한을 부여 -> 다음 버튼 클릭 -> 사용자 이름 및 권한 확인 -> 사용자 생성 버튼 클릭


    IAM 유저 엑세스 키 생성

     

    1. 생성된 유저를 클릭

     

    유저 상세 페이지

     


    2. 보안 자격 증명 탭 클릭 -> 엑세스 키 만들기 버튼 클릭


    3. command line interface 클릭 -> 다음 버튼 클릭 -> 엑세스 키 만들기 클릭

    4. csv 파일 다운로드


    git repository secret 변수 등록

     

    1. 레파지토리로 이동 -> Settings 버튼 클릭


    2. Secrets and variables -> Actions 클릭


    3. 생성한 IAM 유저의 엑세스 키, 시크릿 키를 하나씩 등록합니다.

    -> 저는 모든 리전을 서울( ap-northeast-2 )로 설정했습니다. 


    .github/workflows/github-actions.yml 수정

    name: New Nest Survey
    
    on:
      push:
        branches: [main]
      pull_request:
        branches: [main]
    
      workflow_dispatch:
    
    env:
      # 생성한 s3 버킷 이름
      S3_BUCKET_NAME: new-nest-survey-bucket
      # 자신의 프로젝트 이름
      PROJECT_NAME: new-nest-survey
      # AWS_CODEDEPLOY_APPLICATION_NAME:
      # AWS_CODEDEPLOY_DEPLOYMENT_GROUP_NAME:
    
    jobs:
      # build test
      build:
        runs-on: ubuntu-latest
    
        steps:
          # 레파지토리 코드를 git actions 리눅스로 가져온다.
          - name: Checkout Repository
            uses: actions/checkout@v2.4.2
          # 리눅스 node 설치, 나는 ec2에 설치된 node의 버전과 동일하게 설정
          - name: Setup Node.js environment
            uses: actions/setup-node@v3.4.1
            with:
              node-version: 16.19.0
    
          - name: Install Dependencies
            run: npm install
    
          - name: Build a Nest Application
            run: npm run build
            shell: bash
      # build 테스트를 통과하면 배포
      deploy:
        runs-on: ubuntu-latest
        needs: build
        steps:
          - name: Checkout Repository
            uses: actions/checkout@v2.4.2
    
          - name: Setup Node.js environment
            uses: actions/setup-node@v3.4.1
            with:
              node-version: 16.19.0
    
          - name: Install Dependencies
            run: npm install
    
          - name: Build a Nest Application
            run: npm run build
            shell: bash
          # build 파일 압축
          - name: Make a zip file
            run: zip -r ./$GITHUB_SHA.zip . -x "node_modules/*" "coverage/*" "src/*" "test/*" "README.md" "*.git*"
            shell: bash
          # aws cli
          - 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: ${{ secrets.AWS_REGION }}
          # s3 버킷에 압축된 build 파일 업로드
          - name: Upload to S3
            run: aws s3 cp --region ${{ secrets.AWS_REGION }} ./$GITHUB_SHA.zip s3://$S3_BUCKET_NAME/$PROJECT_NAME/$GITHUB_SHA.zip

    git actions test

     

    1. 레파지토리 Actions탭을 클릭 -> 통과하는지 체크하기

    모든 테스트 통과


    2. s3 버킷으로 이동 -> 자동 업로드 확인

    s3 버킷 파일 자동 업로드 성공

     

Designed by Tistory.