개발/기타

[Github Action] Spring Boot gradle CI/CD 후기

jykim23 2023. 7. 21. 19:22

일기처럼 작성되었습니다. 참고 바랍니다.

 

환경

java 17

spring boot 3.1.1

gradle 8.1.1

 

github

dockerhub

proxmox(KVM 기반 오픈소프 하이퍼바이저)

 

초기 설정

proxmox 설치한 가상머신

mysql 서버

docker 엔진용 서버

 

시나리오

맥북 에어로 개발하고 github로 commit 하면 action에서 gradle & docker 빌드 후 docker서버에서 도커로 배포

 

개념도 제대로 이해 못하고 시작하여 처음엔 가상머신에 scp로 jar 파일 업로드 및 실행하는 방법을 생각했다.

계속 찾아보니 도커가 있는데 그럴 필요가 없었다.

그래서 결과물은 도커로 배포 된다. 그리고 다른 능력자분들의 것들의 짜깁기이다.

 

 

Dockerhub 설정

Account settings - Security - Access Tokens -> 생성 및 키값 아래 작업의 github의 변수에 추가

 

 

Github 리포지토리 설정

설정 - Secrets and Variables - Action - Repository secrets -> 민감정보 설정

 

 

 

Github action - New workflow -> gradle 선택(참고용으로 사용 예정)

 

 

 

Dockerfile 작성(편의를 위해 gradlew 파일과 같은 위치하였다.)

FROM khipu/openjdk17-alpine # 도커허브에서 이미지 검색하여 찾음

COPY ./build/libs/vue-boot-backend-0.0.1-SNAPSHOT.jar app.jar # 프로젝트명 등등

ENTRYPOINT ["java", "-jar", "app.jar"]

 

gradle.yml 파일 작성

# This workflow uses actions that are not certified by GitHub.
# They are provided by a third-party and are governed by
# separate terms of service, privacy policy, and support
# documentation.
# This workflow will build a Java project with Gradle and cache/restore any dependencies to improve the workflow execution time
# For more information see: https://docs.github.com/en/actions/automating-builds-and-tests/building-and-testing-java-with-gradle

name: Java CI with Gradle

on:
  push:
    branches: [ "main" ]
  pull_request:
    branches: [ "main" ]

jobs:
  deploy:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v3
      - name: Set up JDK 17
        uses: actions/setup-java@v3
        with:
          java-version: '17'
          distribution: 'adopt'
          
      - name: 저장소 Checkout
        uses: actions/checkout@v3

      - name: 스프링부트 애플리케이션 빌드 # (1)
        run: ./gradlew build

      - name: 도커 이미지 빌드 # (2)
        run: docker build -t kimjuyoung0923/miner .

      - name: Docker Hub 로그인 # (3)
        uses: docker/login-action@v2
        with:
          username: ${{ secrets.DOCKERHUB_USERNAME }}
          password: ${{ secrets.DOCKERHUB_TOKEN }}

      - name: Docker Hub 퍼블리시 # (4)
        run: docker push kimjuyoung0923/miner

      - name: WAS 인스턴스 접속 및 애플리케이션 실행 # (5)
        uses: appleboy/ssh-action@v0.1.6
        with:
          host: ${{ secrets.SERVER_HOST }}
          username: ${{ secrets.SERVER_USERNAME }}
          password: ${{ secrets.SERVER_PASSWORD }}
          port: ${{ secrets.SERVER_PORT }}
          script: |
            docker stop $(docker ps -a -f "name=miner" -q) 
            docker rm $(docker ps -a -f "name=miner" -q)  
            docker pull kimjuyoung0923/miner
            docker run -d -p 8080:8080 --name miner kimjuyoung0923/miner

 

그 외 작업

도커서버의 사용자에 docker 권한이 없으므로 docker 그룹에 사용자 추가

적용은 파일 저장 후 바로 적용 된다. 기존 ssh 세션은 로그아웃 후 재로그인 해야 한다.(재부팅 안해도 된다.)

사용자(miner) 추가

참고한 블로그

https://hudi.blog/deploy-with-docker-and-github-actions/

'개발 > 기타' 카테고리의 다른 글

[macOS] 배터리 관리 AlDente  (0) 2023.11.15
[macOS] 맥북 리소스 모니터링 툴  (0) 2023.10.31
[Python] vscode 환경설정  (0) 2023.09.13
[Python] VS Code 설치 및 가상환경 설정  (0) 2022.07.05
[Python] Windows 10 설치  (0) 2022.07.05