Merge pull request #89 from ON-GI/develop #12
This file contains hidden or 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: DOCKER CI IN PRODUCTION SERVER # 워크플로우의 이름 설정 | |
| on: | |
| push: | |
| branches: ["main"] # main 브랜치에 푸시될 때 워크플로우 실행 | |
| permissions: | |
| contents: read # 워크플로우의 권한 설정 (read-only) | |
| jobs: | |
| build: | |
| runs-on: ubuntu-latest # 워크플로우가 실행될 환경 설정 (Ubuntu 최신 버전) | |
| steps: | |
| # 코드 체크아웃: GitHub Actions가 현재 리포지토리의 코드를 가져옵니다. | |
| - uses: actions/checkout@v3 | |
| # JDK 17 설정: Java 17 버전을 사용하기 위해 JDK를 설치합니다. | |
| - name: Set up JDK 17 | |
| uses: actions/setup-java@v3 | |
| with: | |
| java-version: '17' # JDK 버전 17 설정 | |
| distribution: 'temurin' # Temurin JDK 배포판 사용 | |
| # application.properties 파일 생성: prod 환경의 설정 파일을 생성하고 secrets에서 값을 가져와 입력합니다. | |
| - name: make application.properties | |
| run: | | |
| cd ./src/main/resources # resources 디렉토리로 이동 | |
| touch ./application.properties # application.properties 파일 생성 | |
| echo "${{ secrets.APPLICATION_PROD }}" > ./application.properties # GitHub Secrets에서 설정값을 가져와 파일에 저장 | |
| # Gradle Wrapper 실행 권한 부여: gradlew에 실행 권한을 부여합니다. | |
| - name: Grant execute permission for gradlew | |
| run: chmod +x gradlew | |
| # Gradle 빌드: Gradle을 사용해 프로젝트를 빌드하되, 테스트는 생략합니다. | |
| - name: Build with Gradle | |
| run: ./gradlew build -x test # 테스트는 실행하지 않고 빌드만 수행 | |
| # Docker 이미지 빌드 및 푸시 | |
| - name: Docker build | |
| run: | | |
| docker login -u ${{ secrets.DOCKER_USERNAME }} -p ${{ secrets.DOCKER_PASSWORD }} # Docker Hub에 로그인 | |
| docker build -t app . # Docker 이미지를 'app'이라는 이름으로 빌드 | |
| docker tag app ${{ secrets.DOCKER_USERNAME }}/backend:latest # 이미지를 Docker Hub 저장소로 태깅 | |
| docker push ${{ secrets.DOCKER_USERNAME }}/backend:latest # 이미지를 Docker Hub에 푸시 | |
| # EC2에서 직접 Docker 배포 | |
| - name: Deploy to EC2 | |
| uses: appleboy/ssh-action@master | |
| with: | |
| host: ${{ secrets.SPRING_EC2_IP }} # EC2 퍼블릭 IP | |
| username: ubuntu # EC2의 사용자 이름 (기본적으로 `ubuntu`) | |
| key: ${{ secrets.SPRING_EC2_PEMKEY }} # EC2의 SSH 개인 키 (GitHub Secrets 사용) | |
| port: 22 # 기본 SSH 포트 | |
| script: | | |
| # Docker 사용을 위한 권한 설정 | |
| sudo usermod -aG docker ubuntu | |
| sudo chmod 666 /var/run/docker.sock | |
| # Docker Hub 로그인 | |
| docker login -u ${{ secrets.DOCKER_USERNAME }} -p ${{ secrets.DOCKER_PASSWORD }} | |
| # 최신 Docker 이미지 Pull | |
| docker pull ${{ secrets.DOCKER_USERNAME }}/backend:latest | |
| # 실행 중인 컨테이너 중 backend 컨테이너가 있으면 중지 및 삭제 | |
| docker stop backend || true | |
| docker rm backend || true | |
| # 새로운 컨테이너 실행 | |
| docker run -d --restart unless-stopped --log-driver=syslog -p 8080:8080 --name backend ${{ secrets.DOCKER_USERNAME }}/backend:latest | |
| # 24시간 이상 사용되지 않은 Docker 이미지 정리 | |
| docker image prune -a -f --filter "until=24h" |