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를 사용하면서 경험치를 늘려야겠다.
'개발일지 > TIL' 카테고리의 다른 글
[230726] [클론] Lifegram 테스트 코드 작성 (2) (0) | 2023.07.26 |
---|---|
[230725] [클론] Lifegram 테스트 코드 작성 (1) (0) | 2023.07.25 |
[230723] [클론] Lifegram 작업 (2) (0) | 2023.07.23 |
[230722] [클론] Lifegram 작업 (1) (0) | 2023.07.22 |
[230721] [클론] Lifegram S.A (0) | 2023.07.21 |