Spring/Spring

스프링부트 공유라이브러리 만들고 jitpack으로 배포하기 - 1편

묠니르묘묘 2023. 12. 18. 22:33

스프링부트 공유라이브러리 만들고 jitpack으로 배포하기 - 1편

스프링부트 공유라이브러리 만들고 jitpack으로 배포하기 - 2편

깃허브 주소 : https://github.com/Sangyong-Jeon/practice_core-service

 

작성 이유

  • SpringBoot(스프링부트)와 Gradle, Java로 라이브러리 만드는 자료가 많이 없었음
  • Maven은 꽤 있었으나 Gradle은 많이 안보였음
  • JitPack 으로 배포하는 방법도 있기는 했으나 나에겐 잘 안되던 것들이었음
  • 시행착오를 많이 겪었던 부분이라 기록으로 남겨서 추후에도 사용하기 위함

 

기술 사양

  • Java 17.0.2 - Zulu
  • SpringBoot 3.2
  • IntelliJ
  • Github

 

간단한 동작 설명

  1. 공유 라이브러리(core-service)에서 Github의 main branch(브랜치)에 Pull Request(PR)를 하여 Merge를 함
  2. 미리 정의했던 Github Actions(깃허브 액션)을 통해 Release(릴리즈) 만듬
  3. JitPack에서 릴리즈의 최신버전을 배포함
Github를 조금이라도 알고있어야 합니다. JitPack은 깃허브와 연동하고 깃허브 릴리즈를 기반으로 만들어 배포하기 때문입니다.

1. 깃허브 액션으로 Tag/Release 자동화 만들기

참고 : https://devocean.sk.com/blog/techBoardDetail.do?ID=164861&boardType=techBlog

Github Repository 만들기

우선 공유 라이브러리인 core-service를 만들겠습니다.

이를 위해 깃허브 리포지토리를 만듭니다.

이후 Actions 탭에 들어갑니다.

깃허브 액션에 와서 [set up a workflow yourself] 클릭

빨간 네모칸에 있는 [set up a workflow yourself] 를 클릭해서 워크플로우를 작성해봅니다.

이미 만들어져있는 워크플로우도 많으니 검색을 해서 그대로 편집하셔도 좋습니다.

깃허브 액션에서 워크플로우 파일 편집

여기서 어떤 작업을 할 것인지(워크플로우)를 작성하면 됩니다.

아래 코드를 넣습니다.

name: github action tag release

on:
  push:
    branches:
      - main
jobs:
  release:
    name: Release
    runs-on: ubuntu-latest
    permissions:
      packages: write
      contents: write
      id-token: write
      
    steps:
      - name: Bump version and push tag
        id: tag_version
        uses: mathieudutour/github-tag-action@v6.1
        with:
          github_token: ${{ secrets.GITHUB_TOKEN }}

      - name: Create a GitHub release
        uses: ncipollo/release-action@v1
        with:
          tag: ${{ steps.tag_version.outputs.new_tag }}
          name: ${{ steps.tag_version.outputs.new_tag }}
          body: ${{ steps.tag_version.outputs.changelog }}
  • name : 워크플로우 이름
  • on : 어떤 조건에서 워크플로우를 실행시킬 것인가를 정의하는 곳 
    • 여기서는 main 브랜치에 push가 올 때 실행
  • jobs : 워크플로우는 여러개의 job으로 구성되며, job들은 기본값으로 병렬실행이기에 순차실행이 필요하면 따로 id 지정해야함
    • release : job의 고유한 id를 의미하며 문자열이어야 함.
      • name : 해당 job의 이름 설정
      • runs-on : 어떤 OS에서 실행할 것인지
      • permissions : 권한 설정
      • steps : job 안에서 순차적으로 실행되는 프로세스 단위가 step
        • - name : step 이름
        • id : step의 고유 id
        • uses : 어떤 액션을 사용할지 지정함. 이미 만들어진 액션을 사용할 때 지정.
        • with : 실행할 때 어떤 파라미터를 같이 넣을건지 정의

워크플로우 동작 설명

  • main 브랜치에 push를 하면 워크플로우가 실행되어 자동 태그하여 릴리즈에 올림
  • 깃허브의 Commit Log를 기반으로 릴리즈 버전이 업데이트되면서 커밋 로그를 바탕으로 배포로그 생성
  • init, modify 는 버전으로 기록되지 않음
  • `fix: `, `feat: ` 두 가지의 깃허브 로그가 기록되어 태그되고 배포로그가 생성됨

코드 넣고 커밋

[Commit changes] 버튼을 누르고 커밋합니다.

이제 깃허브 액션으로 자동 태그와 릴리즈를 만드는 것은 끝.

 

2. 스프링부트 공유 라이브러리 만들기

저는 Git Flow 전략으로 사용하기에 별도의 브랜치를 만들어서 commit과 merge를 합니다.

(저처럼 안하셔도 됩니다)

우선 develop 브랜치를 만들고 여기서 진행하겠습니다.

IntelliJ(인텔리제이)로 스프링부트 Gradle 기반 프로젝트 만들기

깃허브 리포지토리와 폴더를 연결시키고, 거기에 리포지토리 이름과 동일한 프로젝트 이름을 생성함.

저는 /Documents/Github 경로에 practice_core-service 폴더를 만들었음.

그래서 인텔리제이에서 비어있지 않다고 나옴.

이 상태로 다음을 누름.

종속성 정의

현재 가장 최신버전인 스프링부트 3.2.0 버전 사용함.

Spring Web과 Lombok을 넣고 생성함.

이건 편한대로 넣고 진행하면 됨.

Github Desktop으로 Git을 다룸

편의상 Github Desktop을 사용해서 Git을 다룸. 명령어 기반으로 하셔도 됨

이후 커밋하고 PR을 하여 main 브랜치에 Merge하고 Actions 탭에 들어간다

깃허브 액션에서 실행한 워크플로우를 보여줌

저렇게 초록색으로 표시가 되었다면 정상적으로 깃허브 액션 워크플로우가 동작한 것.

깃허브 리포지토리

해당 리포지토리에 들어가면 우측 하단에 릴리즈가 생긴 것을 볼 수 있음.