Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
89 changes: 46 additions & 43 deletions .github/workflows/cd-develop.yml
Original file line number Diff line number Diff line change
@@ -1,71 +1,74 @@
name: CI/CD Pipeline
name: CD - Dev

on:
push:
branches: [ develop ] # develop 브랜치에 push가 일어날 때 실행
workflow_dispatch:

push:
branches:
- develop

jobs:
build:
name: Build and Push Docker Image
runs-on: ubuntu-latest
outputs:
docker_image_tag: ${{ steps.set_tag.outputs.docker_image_tag }}

steps:
- uses: actions/checkout@v3 # 저장소 코드 체크아웃
- name: Checkout code
uses: actions/checkout@v3

- name: Set up JDK 17 # Java 개발 킷 설정
- name: Set up JDK 17
uses: actions/setup-java@v3
with:
distribution: 'temurin'
java-version: '17'
distribution: 'temurin'

- name: Make application.yml # application.yml 파일 생성 (오류 방지용 mkdir 추가)
- name: Make secret files
run: |
mkdir -p ./src/main/resources
echo "${{ secrets.APPLICATION_YML }}" > ./src/main/resources/application.yml
shell: bash
mkdir -p ./src/main/resources
echo "${{ secrets.APPLICATION_YML }}" > ./src/main/resources/application.yml

- name: Grant execute permission for gradlew # gradlew 실행 권한 부여
run: chmod +x gradlew
- name: Build with Gradle
run: |
chmod +x ./gradlew
./gradlew clean build

- name: Build with Gradle # Gradle을 사용하여 프로젝트 빌드
uses: gradle/gradle-build-action@v2
with:
arguments: build
- name: Set Docker image tag (by date)
id: set_tag
run: echo "docker_image_tag=$(date +'%Y%m%d-%H%M')" >> $GITHUB_OUTPUT

- name: Upload build artifact # 빌드된 아티팩트 업로드
uses: actions/upload-artifact@v4
- name: Login to DockerHub
uses: docker/login-action@v3
with:
name: umc7thServer
path: build/libs/*.jar
username: ${{ secrets.DOCKER_HUB_USERNAME }}
password: ${{ secrets.DOCKER_HUB_ACCESS_TOKEN }}

- name: Build and Push Docker image
run: |
docker build -t ${{ secrets.DOCKER_HUB_USERNAME }}/wayble:${{ steps.set_tag.outputs.docker_image_tag }} .
docker push ${{ secrets.DOCKER_HUB_USERNAME }}/wayble:${{ steps.set_tag.outputs.docker_image_tag }}

deploy:
needs: build # build 작업이 성공적으로 완료된 후 실행
name: Deploy to EC2
runs-on: ubuntu-latest
needs: build

steps:
- name: Download build artifact # 이전 단계에서 업로드한 아티팩트 다운로드
uses: actions/download-artifact@v4
- name: SSH to EC2 and deploy
uses: appleboy/ssh-action@v1.2.0
with:
name: umc7thServer
path: build/libs/

- name: Deploy to EC2 # EC2에 배포
env:
EC2_SSH_KEY: ${{ secrets.EC2_SSH_KEY }}
EC2_USERNAME: ${{ secrets.EC2_USERNAME }}
EC2_HOST: ${{ secrets.EC2_HOST }}
run: |
echo "$EC2_SSH_KEY" > private_key.pem
chmod 600 private_key.pem
jar_file=$(find build/libs -name '*.jar' ! -name '*plain.jar' | head -n 1)
scp -i private_key.pem -o StrictHostKeyChecking=no "$jar_file" $EC2_USERNAME@$EC2_HOST:/home/$EC2_USERNAME/umc7thServer.jar
ssh -i private_key.pem -o StrictHostKeyChecking=no $EC2_USERNAME@$EC2_HOST "
pgrep java | xargs -r kill -15 # 기존에 실행 중인 Java 프로세스 종료
sleep 10
nohup java -jar /home/$EC2_USERNAME/umc7thServer.jar > app.log 2>&1 & # 새 버전 애플리케이션 실행
"
rm -f private_key.pem # 민감한 정보 삭제
host: ${{ secrets.EC2_HOST }}
username: ${{ secrets.EC2_USER }}
key: ${{ secrets.EC2_SSH_KEY }}
script: |
cd wayble-spring
git pull
echo "TAG=${{ needs.build.outputs.docker_image_tag }}" > .env
sudo docker-compose stop wayble-app
sudo docker-compose rm -f wayble-app
sudo docker rmi ${{ secrets.DOCKER_HUB_USERNAME }}/wayble:$TAG || true
sudo docker-compose pull wayble-app
sudo docker-compose up -d wayble-app --no-deps



Expand Down