저번 TIL에선 CI/CD 트러블 슈팅에 대해 말했고, 오늘 TIL은 내가 최종적으로 짠 코드이다.
name: Java CI/CD with Gradle
on:
push:
branches: [ "dev" ]
# 환경 변수 설정
env:
ECR_REPOSITORY_NAME: my-java-app-repo # Docker 이미지를 저장할 ECR 리포지토리 이름
ECS_CLUSTER_NAME: MyEchoCluster # ECS 클러스터 이름
ECS_SERVICE_NAME: EchoService # ECS 서비스 이름
AWS_REGION: ap-northeast-2 # AWS 리전
jobs:
build:
runs-on: ubuntu-latest
steps:
- name: Checkout code # 코드 체크아웃
uses: actions/checkout@v4 # GitHub의 checkout 액션 사용
- name: Set up JDK 21 # JDK 21
uses: actions/setup-java@v4
with:
java-version: '21'
distribution: 'temurin'
- name: Grant execute permission for gradlew # gradlew에 실행 권한 부여
run: chmod +x gradlew # gradlew 파일에 실행 권한 부여
- name: Build and Test with Gradle # Gradle로 빌드 및 테스트
run: ./gradlew clean build -x test # 테스트 제외하고 빌드 실행
- name: Archive build artifacts
uses: actions/upload-artifact@v2 # GitHub의 artifact 업로드 액션 사용
with:
name: built-artifact # 아티팩트 이름 설정
path: build/libs/echo-0.0.1-SNAPSHOT.jar # 저장할 파일 경로
deploy:
needs: build # 빌드 작업이 완료된 후에 실행
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Download build artifact
uses: actions/download-artifact@v3
with:
name: built-artifact
path: . # 현재 디렉토리에 저장
- name: Set up JDK 21
uses: actions/setup-java@v4
with:
java-version: '21'
distribution: 'temurin'
- name: Log in to Amazon ECR # Amazon ECR에 로그인
run: aws ecr get-login-password --region ${{ env.AWS_REGION }} | docker login --username AWS --password-stdin ${{ secrets.AWS_ACCOUNT_ID }}.dkr.ecr.${{ env.AWS_REGION }}.amazonaws.com
env:
AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY }}
AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_KEY }}
- name: Create build/libs directory # Docker 컨텍스트를 위한 디렉토리 생성
run: mkdir -p build/libs
- name: Copy artifact to Docker context # 아티팩트를 Docker 컨텍스트로 복사
run: cp echo-0.0.1-SNAPSHOT.jar build/libs/echo-0.0.1-SNAPSHOT.jar # JAR 파일 복사
- name: Build Docker image # Docker 이미지 빌드
run: docker build -t ${{ env.ECR_REPOSITORY_NAME }} -f Dockerfile . # Docker 이미지를 Dockerfile로 빌드
- name: Tag Docker image # Docker 이미지 태깅
run: docker tag ${{ env.ECR_REPOSITORY_NAME }}:latest ${{ secrets.AWS_ACCOUNT_ID }}.dkr.ecr.${{ env.AWS_REGION }}.amazonaws.com/${{ env.ECR_REPOSITORY_NAME }}:latest # 이미지에 태그 추가
- name: Push Docker image to ECR # Docker 이미지를 ECR로 푸시
run: docker push ${{ secrets.AWS_ACCOUNT_ID }}.dkr.ecr.${{ env.AWS_REGION }}.amazonaws.com/${{ env.ECR_REPOSITORY_NAME }}:latest # Docker 이미지 푸시
- name: Deploy Service to ECS # ECS에 서비스 배포
run: |
aws ecs update-service --cluster ${{ env.ECS_CLUSTER_NAME }} --service ${{ env.ECS_SERVICE_NAME }} --force-new-deployment # 서비스 업데이트 및 배포
env:
AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY }}
AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_KEY }}
GihubActions에서 잘 동작하는 걸 볼 수 있다.
8월 21일은 최종 발표다.
'TIL' 카테고리의 다른 글
TIL - 2024/08/27 (0) | 2024.08.27 |
---|---|
TIL - 2024/08/21 (1) | 2024.08.20 |
TIL - 2024/08/15 (0) | 2024.08.16 |
TIL - 2024/08/14 (0) | 2024.08.16 |
TIL - 2024/08/13 (0) | 2024.08.16 |