@@ -2,102 +2,79 @@ name: Moongeul CI/CD
22
33on :
44 push :
5- branches : [ "develop" ]
5+ branches :
6+ - develop # CI
7+ - main # CD
68
79permissions :
810 contents : read
911
1012jobs :
11- # Spring Boot 애플리케이션을 빌드하여 도커허브에 푸시하는 과정
13+ # ─── CI: develop/main 공통 ─────────────────────────────────────
1214 build-docker-image :
1315 runs-on : ubuntu-latest
16+ # develop 또는 main 일 때만 실행
17+ if : |
18+ github.ref == 'refs/heads/develop' ||
19+ github.ref == 'refs/heads/main'
1420 steps :
15- - uses : actions/checkout@v4
16- # 1. Java 17 세팅
17- - name : Set up JDK 17
18- uses : actions/setup-java@v3
19- with :
20- java-version : ' 17'
21- distribution : ' temurin'
21+ - uses : actions/checkout@v4
22+
23+ - name : Set up JDK 17
24+ uses : actions/setup-java@v3
25+ with :
26+ java-version : ' 17'
27+ distribution : ' temurin'
28+
29+ - name : Create application.yml files
30+ run : |
31+ mkdir -p src/main/resources
32+ echo "${{ secrets.APPLICATION_YML }}" > src/main/resources/application.yml
33+ echo "${{ secrets.APPLICATION_BOOK_YML }}" > src/main/resources/application-book.yml
34+ echo "${{ secrets.APPLICATION_JWT_YML }}" > src/main/resources/application-jwt.yml
35+ echo "${{ secrets.APPLICATION_OAUTH2_YML }}" > src/main/resources/application-oauth.yml
36+ echo "${{ secrets.APPLICATION_PROHIBIT_NICKNAME_YML }}" > src/main/resources/application-prohibit_nickname.yml
37+ echo "${{ secrets.APPLICATION_AWS_YML }}" > src/main/resources/application-aws.yml
38+
39+ - name : Setup Gradle
40+ uses : gradle/actions/setup-gradle@v3
41+
42+ - name : Build with Gradle
43+ run : ./gradlew clean bootJar
44+
45+ - name : Build Docker image
46+ run : docker build -t ${{ secrets.DOCKERHUB_USERNAME }}/book_cicd_action:${{ github.ref_name }} .
47+
48+ - name : Log in to Docker Hub
49+ uses : docker/login-action@v3
50+ with :
51+ username : ${{ secrets.DOCKERHUB_USERNAME }}
52+ password : ${{ secrets.DOCKERHUB_PASSWORD }}
53+
54+ - name : Push Docker image
55+ run : docker push ${{ secrets.DOCKERHUB_USERNAME }}/book_cicd_action:${{ github.ref_name }}
2256
23- # 2-1. application.yml 파일 생성
24- - name : Create application.yml
25- run : |
26- mkdir -p src/main/resources
27- echo "${{ secrets.APPLICATION_YML }}" > src/main/resources/application.yml
28-
29- # 2-2. application-book.yml 파일 생성
30- - name : Create application-book.yml
31- run : |
32- mkdir -p src/main/resources
33- echo "${{ secrets.APPLICATION_BOOK_YML }}" > src/main/resources/application-book.yml
34-
35- # 2-3. application-jwt.yml 파일 생성
36- - name : Create application-jwt.yml
37- run : |
38- mkdir -p src/main/resources
39- echo "${{ secrets.APPLICATION_JWT_YML }}" > src/main/resources/application-jwt.yml
40-
41- # 2-4. application-oauth.yml 파일 생성
42- - name : Create application-oauth.yml
43- run : |
44- mkdir -p src/main/resources
45- echo "${{ secrets.APPLICATION_OAUTH2_YML }}" > src/main/resources/application-oauth.yml
46-
47- # 2-5. application-prohibit_nickname.yml 파일 생성
48- - name : Create application-prohibit_nickname.yml
49- run : |
50- mkdir -p src/main/resources
51- echo "${{ secrets.APPLICATION_PROHIBIT_NICKNAME_YML }}" > src/main/resources/application-prohibit_nickname.yml
52-
53- # 2-6. application-aws.yml 파일 생성
54- - name : Create application-aws.yml
55- run : |
56- mkdir -p src/main/resources
57- echo "${{ secrets.APPLICATION_AWS_YML }}" > src/main/resources/application-aws.yml
58-
59- # 3. Gradle 설정
60- - name : Setup Gradle
61- uses : gradle/actions/setup-gradle@v3
62-
63- # 4. Spring Boot 애플리케이션 빌드
64- - name : Build with Gradle
65- run : ./gradlew clean bootJar
66-
67- # 5. Docker 이미지 빌드
68- - name : docker image build
69- run : docker build -t ${{ secrets.DOCKERHUB_USERNAME }}/book_cicd_action .
70-
71- # 6. DockerHub 로그인
72- - name : docker login
73- uses : docker/login-action@v3
74- with :
75- username : ${{ secrets.DOCKERHUB_USERNAME }}
76- password : ${{ secrets.DOCKERHUB_PASSWORD }}
77-
78- # 7. Docker Hub 이미지 푸시
79- - name : docker Hub push
80- run : docker push ${{ secrets.DOCKERHUB_USERNAME }}/book_cicd_action
81-
82- # 위 과정에서 푸시한 이미지를 ec2에서 풀받아서 실행시키는 과정
8357 run-docker-image-on-ec2 :
84- # build-docker-image (위)과정이 완료되어야 실행됩니다.
8558 needs : build-docker-image
8659 runs-on : self-hosted
87-
60+ # main 브랜치에서만 실행
61+ if : github.ref == 'refs/heads/main'
8862 steps :
89- # 1. 최신 이미지를 풀받습니다
90- - name : docker pull
91- run : sudo docker pull ${{ secrets.DOCKERHUB_USERNAME }}/book_cicd_action
92-
93- # 2. 기존의 컨테이너를 중지시킵니다
94- - name : docker stop container
95- run : sudo docker stop $(sudo docker ps -q) 2>/dev/null || true
96-
97- # 3. 최신 이미지를 컨테이너화하여 실행시킵니다
98- - name : docker run new container
99- run : sudo docker run --name moongeul --rm -d -p 8080:8080 ${{ secrets.DOCKERHUB_USERNAME }}/book_cicd_action
100-
101- # 4. 미사용 이미지를 정리합니다
102- - name : delete old docker image
63+ - name : Pull latest Docker image
64+ run : sudo docker pull ${{ secrets.DOCKERHUB_USERNAME }}/book_cicd_action:main
65+
66+ - name : Stop existing container (if any)
67+ run : |
68+ sudo docker stop moongeul || true
69+ sudo docker rm moongeul || true
70+
71+ - name : Run new container
72+ run : |
73+ sudo docker run \
74+ --name moongeul \
75+ --rm -d \
76+ -p 8080:8080 \
77+ ${{ secrets.DOCKERHUB_USERNAME }}/book_cicd_action:main
78+
79+ - name : Clean up unused images
10380 run : sudo docker system prune -f
0 commit comments