diff --git a/.github/workflows/gradle.yml b/.github/workflows/gradle.yml index 8901d07a..9028ea53 100644 --- a/.github/workflows/gradle.yml +++ b/.github/workflows/gradle.yml @@ -1,4 +1,4 @@ -name: Java CI with Gradle +name: Java CI/CD with Gradle and Docker on: push: @@ -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: @@ -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