본문 바로가기

개발일지/TIL

[230724] [클론] Lifegram CI/CD 이슈

CI/CD 구성

Git Action, AWS S3, CodeDeploy, EC2를 사용해서 CI/CD를 구성을 했다. 

 

✔ Git Action Deploy.yml 적용 및 결과

 

name: deploy

on:
  push:
    branches: [ main ]

env:
  S3_BUCKET_NAME: lifgram-deploy-bucket
  PROJECT_NAME: lifegram
  JAR_PATH: ./build/libs
  JAR_NAME: lifegram-0.0.1-SNAPSHOT.jar


jobs:
  build:
    runs-on: ubuntu-latest

    steps:
      - name: Checkout
        uses: actions/checkout@v2
        with:
          token: ${{ secrets.ACTION_TOKEN }}
          submodules: true

      - name: Set up JDK 17
        uses: actions/setup-java@v1
        with:
          java-version: 17

      - name: Grant execute permission for gradlew
        run: chmod +x ./gradlew
        shell: bash

      - name: Build with Gradle
        run: ./gradlew build
        shell: bash

      - name: Make Directory for deliver
        run: mkdir deploy && cp $JAR_PATH/*.jar deploy/ && cp appspec.yml deploy/ && cp deploy.sh deploy/
#
      - name: Make zip file
        run: zip -r ./$PROJECT_NAME.zip deploy
        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: ${{ secrets.AWS_REGION }}

      - name: Upload to S3
        run: aws s3 cp --region ap-northeast-2 ./$PROJECT_NAME.zip s3://$S3_BUCKET_NAME/$PROJECT_NAME/$PROJECT_NAME.zip

      - name: Code Deploy
        run: aws deploy create-deployment --application-name $PROJECT_NAME --deployment-config-name CodeDeployDefault.AllAtOnce --deployment-group-name codedeploy --s3-location bucket=$S3_BUCKET_NAME,bundleType=zip,key=$PROJECT_NAME/$PROJECT_NAME.zip

 

✔ IAM Role 생성 정책

 

✔ S3 생성 및 업로드 결과

 

✔ CodeDeploy 적용 및 결과

 

version: 0.0
os: linux

files:
  - source: /
    destination: /home/ubuntu
    overwrite: yes
file_exists_behavior: OVERWRITE
permissions:
  - object: /
    pattern: "**"
    owner: ubuntu
    group: ubuntu
    mode: 755
hooks:
  AfterInstall:
    - location: deploy.sh
      timeout: 60
      runas: root

 

이슈

💢 S3에 Jar가 들어 있는 zip 파일이 올라갔다. 그런데 계속해서 CodeDeploy에서 실패가 발생했다. 원인을 확인하기 위해 EC2에서 로그를 확인했다.
➡ EC2 로그 위치 : /var/log/aws/codedeploy-agent/codedeploy-agent.log
➡ Error : InstanceAgent::Plugins::CodeDeployPlugin::CommandPoller: Missing credentials - please check if this instance was started with an IAM instance profile

✅ EC2에 IAM 권한이 없어서 생기는 문제였다. 그래서 EC2에 IAM 권한을 설정해 줬더니 정상적으로 동작하는 것을 확인할 수 있었다.
➡ Actions - Security - Modify IAM role에서 설정해 놓은 role 부여

생각

AWS는 권한을 부여하는 것이 항상 일이다. 어떤 문제가 있으면 대부분 권한을 주면 해결이 되는 것 같다. 그래도 경험을 많이 하다 보니 문제를 마주할 때마다 조금씩 해결하는 속도가 빨리 지는 것을 느낀다. 계속해서 AWS를 사용하면서 경험치를 늘려야겠다.