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
71 changes: 49 additions & 22 deletions .github/workflows/gradle.yml
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
name: Java CI with Gradle
name: Java CI/CD with Gradle and Docker

on:
push:
Expand All @@ -13,7 +13,10 @@ jobs:
contents: read

steps:
# 코드 체크아웃
- uses: actions/checkout@v4

# Java와 Gradle 설정
- name: Set up JDK 17
uses: actions/setup-java@v4
with:
Expand All @@ -26,42 +29,66 @@ jobs:
- name: Grant execute permission for gradlew
run: chmod +x gradlew

# Spring Boot 어플리케이션 Build
# Spring Boot 어플리케이션 빌드
- name: Build with Gradle Wrapper
run: ./gradlew build

# Docker 이미지 Build
- name: docker image build
run: docker build -t ${{ secrets.DOCKERHUB_USERNAME }}/spring-cicd-test .
# Docker 이미지 빌드
- name: Docker image build
run: docker build -t ${{ secrets.DOCKERHUB_USERNAME }}/stackpot-be-spring .

# DockerHub Login (push 하기 위해)
- name: docker login
# DockerHub 로그인
- name: Docker login
uses: docker/login-action@v2
with:
username: ${{ secrets.DOCKERHUB_USERNAME }}
password: ${{ secrets.DOCKERHUB_PASSWORD }}

# Docker hub 로 push
- name: Docker Hub push
run: docker push ${{ secrets.DOCKERHUB_USERNAME }}/spring-cicd-test
# Docker 이미지 푸시
- name: Docker image push
run: docker push ${{ secrets.DOCKERHUB_USERNAME }}/stackpot-be-spring

# 위 과정에서 푸시한 이미지를 ec2에서 풀받아서 실행
run-docker-image-on-ec2:
deploy:
needs: build-docker-image
runs-on: self-hosted

steps:
- name: docker pull
run : sudo docker pull ${{ secrets.DOCKERHUB_USERNAME }}/spring-cicd-test
- name: Pull Spring image
run: docker pull ${{ secrets.DOCKERHUB_USERNAME }}/stackpot-be-spring

# Spring 컨테이너 실행
- name: Run Spring container
run: |
docker stop spring || true
docker rm spring || true
docker run -d --name spring -p 8080:8080 ${{ secrets.DOCKERHUB_USERNAME }}/stackpot-be-spring

# Nginx 컨테이너 실행
- name: Run Nginx container
run: |
docker stop nginx || true
docker rm nginx || true
docker run -d \
--name nginx \
-p 80:80 \
-p 443:443 \
-v ./nginx/conf.d:/etc/nginx/conf.d \
-v ./certbot/conf:/etc/letsencrypt \
-v ./certbot/www:/var/www/certbot \
nginx:1.15-alpine

- name: docker stop container
# Certbot 컨테이너 실행
- name: Run Certbot container
run: |
if [ $(sudo docker ps -a -q -f name=spring-cicd-test) ]; then
sudo docker stop spring-cicd-test
fi
docker stop stackpot-be_certbot_1 || true
docker rm stackpot-be_certbot_1 || true
docker run --rm \
--name stackpot-be_certbot_1 \
-v ./certbot/conf:/etc/letsencrypt \
-v ./certbot/www:/var/www/certbot \
certbot/certbot certonly --webroot --webroot-path=/var/www/certbot -d api.stackpot.co.kr

- name: docker run new container
run: sudo docker run --rm -it -d -p 80:8080 --name spring-cicd-test ${{ secrets.DOCKERHUB_USERNAME }}/spring-cicd-test
# Docker 이미지 및 컨테이너 정리
- name: Clean up Docker system
run: docker system prune -f

- name: delete old docker image
run: sudo docker system prune -f
Loading