스프링부트 공유라이브러리 만들고 jitpack으로 배포하기 - 1편
스프링부트 공유라이브러리 만들고 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
간단한 동작 설명
- 공유 라이브러리(core-service)에서 Github의 main branch(브랜치)에 Pull Request(PR)를 하여 Merge를 함
- 미리 정의했던 Github Actions(깃허브 액션)을 통해 Release(릴리즈) 만듬
- JitPack에서 릴리즈의 최신버전을 배포함
Github를 조금이라도 알고있어야 합니다. JitPack은 깃허브와 연동하고 깃허브 릴리즈를 기반으로 만들어 배포하기 때문입니다.
1. 깃허브 액션으로 Tag/Release 자동화 만들기
참고 : https://devocean.sk.com/blog/techBoardDetail.do?ID=164861&boardType=techBlog
우선 공유 라이브러리인 core-service를 만들겠습니다.
이를 위해 깃허브 리포지토리를 만듭니다.
이후 Actions 탭에 들어갑니다.
빨간 네모칸에 있는 [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 : 실행할 때 어떤 파라미터를 같이 넣을건지 정의
- release : job의 고유한 id를 의미하며 문자열이어야 함.
워크플로우 동작 설명
- main 브랜치에 push를 하면 워크플로우가 실행되어 자동 태그하여 릴리즈에 올림
- 깃허브의 Commit Log를 기반으로 릴리즈 버전이 업데이트되면서 커밋 로그를 바탕으로 배포로그 생성
- init, modify 는 버전으로 기록되지 않음
- `fix: `, `feat: ` 두 가지의 깃허브 로그가 기록되어 태그되고 배포로그가 생성됨
[Commit changes] 버튼을 누르고 커밋합니다.
이제 깃허브 액션으로 자동 태그와 릴리즈를 만드는 것은 끝.
2. 스프링부트 공유 라이브러리 만들기
저는 Git Flow 전략으로 사용하기에 별도의 브랜치를 만들어서 commit과 merge를 합니다.
(저처럼 안하셔도 됩니다)
우선 develop 브랜치를 만들고 여기서 진행하겠습니다.
깃허브 리포지토리와 폴더를 연결시키고, 거기에 리포지토리 이름과 동일한 프로젝트 이름을 생성함.
저는 /Documents/Github 경로에 practice_core-service 폴더를 만들었음.
그래서 인텔리제이에서 비어있지 않다고 나옴.
이 상태로 다음을 누름.
현재 가장 최신버전인 스프링부트 3.2.0 버전 사용함.
Spring Web과 Lombok을 넣고 생성함.
이건 편한대로 넣고 진행하면 됨.
편의상 Github Desktop을 사용해서 Git을 다룸. 명령어 기반으로 하셔도 됨
이후 커밋하고 PR을 하여 main 브랜치에 Merge하고 Actions 탭에 들어간다
저렇게 초록색으로 표시가 되었다면 정상적으로 깃허브 액션 워크플로우가 동작한 것.
해당 리포지토리에 들어가면 우측 하단에 릴리즈가 생긴 것을 볼 수 있음.