Skip to content

Update ci-cd.yml last #8

Update ci-cd.yml last

Update ci-cd.yml last #8

Workflow file for this run

# 워크플로우의 이름
name: Spring Boot CI/CD with AWS
# 워크플로우가 실행될 조건 정의
on:
push:
branches: [ develop ] # develop 브랜치에 push 이벤트가 발생했을 때 실행
# OIDC 토큰 요청을 위한 권한 설정 (필수)
permissions:
id-token: write
contents: read
jobs:
# 'build-and-deploy' 라는 이름의 작업 정의
build-and-deploy:
# 이 작업은 GitHub가 제공하는 최신 Ubuntu 가상머신에서 실행
runs-on: ubuntu-latest
# 작업 내에서 실행될 단계들
steps:
# 1. 소스 코드 체크아웃
- name: Checkout Source Code
uses: actions/checkout@v4
# 2. JDK 17 설치 (Corretto 배포판 사용)
- name: Set up JDK 17
uses: actions/setup-java@v4
with:
java-version: '17'
distribution: 'corretto'
# 3. Gradle 실행 권한 부여
- name: Grant execute permission for gradlew
run: chmod +x ./gradlew
# 4. Gradle로 빌드 및 단위 테스트 실행
# 'build' 명령어는 'test' 작업을 포함하므로, 단위 테스트가 자동으로 실행됩니다.
- name: Build with Gradle
run: ./gradlew build
# 5. AWS 자격 증명 설정 (OIDC 방식)
- name: Configure AWS credentials using OIDC
uses: aws-actions/configure-aws-credentials@v4
with:
role-to-assume: ${{ secrets.AWS_ROLE_TO_ASSUME }}
aws-region: ${{ secrets.AWS_REGION }}
# 6. Amazon ECR에 로그인
- name: Login to Amazon ECR
id: login-ecr
uses: aws-actions/amazon-ecr-login@v2
# 7. Docker 이미지 빌드, 태깅, ECR에 푸시
- name: Build, tag, and push image to Amazon ECR
id: build-image
env:
ECR_REGISTRY: ${{ steps.login-ecr.outputs.registry }}
ECR_REPOSITORY: cp_main_be # 1단계에서 생성한 ECR 리포지토리 이름
IMAGE_TAG: ${{ github.sha }} # Git 커밋 해시를 이미지 태그로 사용하여 버전을 관리
run: |
docker build -t $ECR_REGISTRY/$ECR_REPOSITORY:$IMAGE_TAG .
docker tag $ECR_REGISTRY/$ECR_REPOSITORY:$IMAGE_TAG $ECR_REGISTRY/$ECR_REPOSITORY:latest
docker push --all-tags $ECR_REGISTRY/$ECR_REPOSITORY
# 8. EC2에 접속하여 배포 스크립트 실행
- name: Deploy to EC2 instance
uses: appleboy/ssh-action@master
with:
host: ${{ secrets.EC2_HOST }}
username: ${{ secrets.EC2_USER }}
key: ${{ secrets.EC2_SSH_KEY }}
script: |
# 하드코딩된 값으로 테스트
ECR_REGISTRY="${{ steps.login-ecr.outputs.registry }}"
ECR_REPOSITORY="cp_main_be"
AWS_REGION="${{ secrets.AWS_REGION }}"
echo "ECR_REGISTRY: $ECR_REGISTRY"
echo "ECR_REPOSITORY: $ECR_REPOSITORY"
echo "AWS_REGION: $AWS_REGION"
# AWS CLI 설정
aws ecr get-login-password --region $AWS_REGION | docker login --username AWS --password-stdin $ECR_REGISTRY
# 1. 이미지 pull
docker pull $ECR_REGISTRY/$ECR_REPOSITORY:latest
# 2. 기존 컨테이너 정리
if [ $(docker ps -a -q -f name=spring-app-container) ]; then
docker stop spring-app-container
docker rm spring-app-container
fi
# 환경변수 로드
source /etc/environment
# 3. 새 컨테이너 실행
docker run -d --name spring-app-container -p 8080:8080 \
-e DB_URL="$DB_URL" \
-e DB_USERNAME="$DB_USERNAME" \
-e DB_PASSWORD="$DB_PASSWORD" \
-e SPRING_PROFILES_ACTIVE=prod \
-e R2_ENDPOINT="${{ secrets.R2_ENDPOINT }}" \
-e R2_BUCKET="${{ secrets.R2_BUCKET }}" \
-e R2_ACCESS_KEY="${{ secrets.R2_ACCESS_KEY }}" \
-e R2_SECRET_KEY="${{ secrets.R2_SECRET_KEY }}" \
$ECR_REGISTRY/$ECR_REPOSITORY:latest