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