[CI/CD] Springboot와 Github Actions를 사용한 컨테이너 자동 배포

이멀젼씨

·

2021. 12. 24. 10:11

목적

코드의 푸시부터 빌드, 컨테이너 이미지 생성, 배포까지의 단계를 자동화 하기 위함

목차

  1. 구성
  2. Github Actions 스크립트
  3. 실행 과정

1. 구성

  • Springboot 2.3+
  • Github Actions

https://emgc.tistory.com/149
Springboot에서 bootBuildImage를 사용하여 도커 허브로 push하는 부분은 윗글을 참조하면 되겠다.

2. Github Actions 스크립트

name: Java CI with Gradle

on:
  push:
    branches: [ main ]

jobs:
  build:

    runs-on: ubuntu-latest

    steps:
    - uses: actions/checkout@v2
    - name: Set up JDK 11
      uses: actions/setup-java@v2
      with:
        java-version: '11'
        distribution: 'adopt'
    - name: Grant execute permission for gradlew
      run: chmod +x gradlew
    - name: build docker
      run: ./gradlew bootBuildImage
    - name: SSH Remote Commands
      uses: appleboy/ssh-action@v0.1.4        
      with:
        host: ${{ secrets.HOST }}          
        username: ${{ secrets.USER }}
        password: ${{ secrets.PW }}
        port: ${{ secrets.PORT }}
        timeout: 40s  # 30초 기본        
        script: |

          echo "Login Start . . ."
          docker login -u ${{ secrets.DOCKER_ID }} -p ${{ secrets.DOCKER_PW }}

          echo "Image Download . . ."
          docker pull ${{ secrets.DOCKER_ID }}/${{ secrets.NAME }}

          echo "Container Stop . . ."
          docker stop ${{ secrets.NAME }} 

          echo "Container Remove . . ."
          docker rm ${{ secrets.NAME }}

          echo "Container Start . . ."
          docker run -d -p 8000:8000 --name ${{ secrets.NAME }} ${{ secrets.DOCKER_ID }}/${{ secrets.NAME }}

3. 실행과정

  • gradlew 명령어를 실행할 수 있도록 chmod로 권한 설정
  • bootbuildimage 명령어를 통해 이미지 빌드 후 도커 허브에 push
  • push이후 ssh로 서버에 접속하여 script에 설정된 명령어 실행
  • public repository라면 로그인이 굳이 필요 없겠지만 private이라면 로그인이 필요
  • 이미지 다운로드
  • 기존에 실행되는 컨테이너 중지
  • 중지된 컨테이너 제거
  • 새롭게 컨테이너 시작