feat: 무중단 배포를 위한 워크 플로우 수정 #2
Workflow file for this run
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
name: Java CI/CD with Gradle | |
# 워크플로우가 실행될 조건을 정의합니다. | |
on: | |
push: | |
branches: [ "feat/#64/aws-auto-scaling-group" ] # main 브랜치에 push가 발생하면 실행됩니다. | |
# 워크플로우가 접근할 수 있는 권한을 설정합니다. | |
permissions: | |
contents: read | |
jobs: | |
# Docker 이미지를 빌드하고 Docker Hub에 푸시하는 작업을 정의합니다. | |
build-docker-image: | |
runs-on: ubuntu-latest # 워크플로우가 실행될 환경을 지정합니다. | |
steps: | |
# 리포지토리의 코드를 체크아웃합니다. | |
- uses: actions/checkout@v3 | |
# JDK 17을 설치하고 환경을 설정합니다. | |
- name: Set up JDK 17 | |
uses: actions/setup-java@v3 | |
with: | |
java-version: '17' | |
distribution: 'temurin' | |
# Gradle Wrapper 파일에 실행 권한을 부여합니다. | |
- name: Grant Execute Permission For Gradlew | |
run: chmod +x gradlew | |
# gradle caching - 빌드 시간 향상 | |
- name: Gradle Caching | |
uses: actions/cache@v3 | |
with: | |
path: | | |
~/.gradle/caches | |
~/.gradle/wrapper | |
key: ${{ runner.os }}-gradle-${{ hashFiles('**/*.gradle*', '**/gradle-wrapper.properties') }} | |
restore-keys: | | |
${{ runner.os }}-gradle- | |
# Gradle을 사용하여 프로젝트를 빌드합니다. | |
- name: Build With Gradle | |
run: ./gradlew build -x test | |
# Docker 이미지를 빌드합니다. | |
- name: docker image build | |
run: docker build -t ${{ secrets.DOCKERHUB_USERNAME }}/github-actions-demo . | |
# Docker Hub에 로그인합니다. 로그인 정보는 GitHub Secrets를 통해 안전하게 관리됩니다. | |
- name: docker login | |
uses: docker/login-action@v2 | |
with: | |
username: ${{ secrets.DOCKERHUB_USERNAME }} # Docker Hub 사용자 이름 | |
password: ${{ secrets.DOCKERHUB_PASSWORD }} # Docker Hub 비밀번호 | |
# 빌드된 Docker 이미지를 Docker Hub에 푸시합니다. | |
- name: docker Hub push | |
run: docker push ${{ secrets.DOCKERHUB_USERNAME }}/github-actions-demo | |
- | |
# 권한 주입 | |
- name: Configure AWS credentials | |
uses: aws-actions/configure-aws-credentials@v1 | |
with: | |
aws-access-key-id: ${{ secrets.ACCESS_KEY }} | |
aws-secret-access-key: ${{ secrets.SECRET_KEY }} | |
aws-region: ${{ secrets.REGION }} | |
# S3에 Docker Compose 파일 업로드 | |
- name: Upload Docker Compose to S3 | |
run: | | |
aws s3 cp docker-compose.yml s3://${{ secrets.BUCKET_NAME }}/docker-compose.yml --region ${{ secrets.REGION }} | |
# ASG 재시작 | |
- name: Trigger ASG Rolling Update | |
run: | | |
aws autoscaling start-instance-refresh \ | |
--auto-scaling-group-name ${{ secrets.ASG_NAME }} \ | |
--region ${{ secrets.REGION }} \ | |
--preferences '{"MinHealthyPercentage": 50}' |