[CI/CD] Springboot와 Github Actions를 사용한 컨테이너 자동 배포
이멀젼씨
·2021. 12. 24. 10:11
목적
코드의 푸시부터 빌드, 컨테이너 이미지 생성, 배포까지의 단계를 자동화 하기 위함
목차
- 구성
- Github Actions 스크립트
- 실행 과정
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이라면 로그인이 필요
- 이미지 다운로드
- 기존에 실행되는 컨테이너 중지
- 중지된 컨테이너 제거
- 새롭게 컨테이너 시작