Skip to content

Commit 6459b13

Browse files
authored
Merge pull request #49 from minmin02/minkyu
Feat : CD/CD자동배포 yml 추가
2 parents 3ca9474 + a40ce02 commit 6459b13

File tree

1 file changed

+76
-0
lines changed

1 file changed

+76
-0
lines changed

.github/workflows/cicd.yml

Lines changed: 76 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,76 @@
1+
name: CI/CD using github actions & docker
2+
3+
on:
4+
push:
5+
branches: ["develop"]
6+
7+
permissions:
8+
contents: read
9+
10+
jobs:
11+
CI-CD:
12+
runs-on: ubuntu-latest
13+
steps:
14+
- uses: actions/checkout@v3
15+
16+
# JDK 21 설정 (GuardPay 빌드 환경)
17+
- name: Set up JDK 21
18+
uses: actions/setup-java@v3
19+
with:
20+
java-version: '21'
21+
distribution: 'temurin'
22+
23+
# Gradle 캐싱 (빌드 속도 향상)
24+
- name: Gradle Caching
25+
uses: actions/cache@v3
26+
with:
27+
path: |
28+
~/.gradle/caches
29+
~/.gradle/wrapper
30+
key: ${{ runner.os }}-gradle-${{ hashFiles('**/*.gradle*', '**/gradle-wrapper.properties') }}
31+
restore-keys: |
32+
${{ runner.os }}-gradle-
33+
34+
# application.yml 설정 (GitHub Secrets 활용)
35+
- name: Create application.yml
36+
run: |
37+
mkdir -p ./src/main/resources
38+
echo "${{ secrets.APPLICATION }}" > ./src/main/resources/application.yml
39+
40+
# Gradle 빌드 (테스트 제외)
41+
- name: Build with Gradle
42+
run: |
43+
chmod +x ./gradlew
44+
./gradlew build -x test
45+
46+
# Docker 빌드 & 푸시 (EC2 아키텍처에 맞게 linux/amd64 지정)
47+
- name: Docker build & push
48+
run: |
49+
echo "${{ secrets.DOCKER_PASSWORD }}" | docker login -u "${{ secrets.DOCKER_USERNAME }}" --password-stdin
50+
docker build --platform linux/amd64 -t "${{ secrets.DOCKER_USERNAME }}/${{ secrets.DOCKER_PROJECT }}:latest" .
51+
docker push "${{ secrets.DOCKER_USERNAME }}/${{ secrets.DOCKER_PROJECT }}:latest"
52+
53+
# EC2 실제 배포 작업
54+
- name: Deploy to EC2
55+
uses: appleboy/ssh-action@master
56+
with:
57+
host: ${{ secrets.HOST_PROD }}
58+
username: ubuntu
59+
key: ${{ secrets.PRIVATE_KEY }}
60+
script: |
61+
# 1. 기존 컨테이너 중지 및 삭제 (이름: guardpay-server)
62+
sudo docker stop guardpay-server || true
63+
sudo docker rm guardpay-server || true
64+
65+
# 2. 최신 이미지 pull
66+
sudo docker pull ${{ secrets.DOCKER_USERNAME }}/${{ secrets.DOCKER_PROJECT }}:latest
67+
68+
# 3. 컨테이너 실행 (아까 실습한 네트워크와 환경변수 적용 추천)
69+
# 만약 DB와 네트워크 연결을 이미 해두셨다면 아래 명령어를 사용하세요.
70+
sudo docker run -d --name guardpay-server \
71+
--network guardpay-net \
72+
-p 8080:8080 \
73+
${{ secrets.DOCKER_USERNAME }}/${{ secrets.DOCKER_PROJECT }}:latest
74+
75+
# 4. 사용하지 않는 이미지 정리
76+
sudo docker image prune -f

0 commit comments

Comments
 (0)