Merge pull request #4 from Tave-13th-Project-Team-4-Fiurinee/feature/… #5
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
name: Java CI/CD with Gradle | |
# 동작 조건 설정: dev 브랜치에 push 또는 pull request가 발생할 경우 동작한다. | |
on: | |
push: | |
branches: [ "dev" ] | |
pull_request: | |
branches: [ "dev" ] | |
permissions: | |
contents: read | |
jobs: | |
# 1. Spring Boot 애플리케이션을 빌드하고 도커허브에 푸시하는 과정 | |
build-docker-image: | |
runs-on: ubuntu-latest | |
steps: | |
# GitHub 리포지토리에서 코드를 체크아웃한다. | |
- uses: actions/checkout@v3 | |
# Java 17을 설치하고 환경을 설정한다. | |
- name: Set up JDK 17 | |
uses: actions/setup-java@v3 | |
with: | |
java-version: '17' | |
distribution: 'temurin' | |
# Gradle Wrapper 파일에 실행 권한을 부여한다. | |
- name: Grant Execute Permission For Gradlew | |
run: chmod +x gradlew | |
# Spring Boot 애플리케이션을 빌드한다. | |
- name: Build With Gradle | |
run: ./gradlew build -x test # 일단 테스트 건너뛰기 | |
# Docker 이미지를 빌드한다. | |
- name: docker image build | |
run: docker build -t ${{ secrets.DOCKERHUB_USERNAME }}/fiurinee_docker . | |
# DockerHub에 로그인한다. 로그인 정보는 GitHub Secrets를 통해 안전하게 관리한다. | |
- name: docker login | |
uses: docker/login-action@v2 | |
with: | |
username: ${{ secrets.DOCKERHUB_USERNAME }} | |
password: ${{ secrets.DOCKERHUB_PASSWORD }} | |
# Docker 이미지를 Docker Hub에 푸시한다. | |
- name: docker Hub push | |
run: docker push ${{ secrets.DOCKERHUB_USERNAME }}/fiurinee_docker | |
# 2. 새로운 Docker 이미지를 서버에 배포하는 과정 | |
deploy: | |
# build-docker-image 작업이 완료된 후에 실행된다. | |
needs: build-docker-image | |
runs-on: ubuntu-latest | |
steps: | |
# 서버에 SSH로 접속하여 Docker 이미지를 pull하고 컨테이너를 재시작한다. | |
- name: Deploy to EC2 | |
uses: appleboy/ssh-action@master | |
with: | |
host: ${{ secrets.EC2_HOST }} # 서버의 호스트 주소 (예: 3.36.169.209) | |
username: ubuntu # 서버의 사용자 이름 | |
key: ${{ secrets.EC2_SSH_KEY }} # 서버에 접근하기 위한 SSH 키 | |
script: | | |
sudo docker pull ${{ secrets.DOCKERHUB_USERNAME }}/fiurinee_docker | |
sudo docker stop fiurinee || true | |
sudo docker rm fiurinee || true | |
sudo docker run -d -p 3000:8080 --name fiurinee ${{ secrets.DOCKERHUB_USERNAME }}/docker_test | |