-
github으로 maven repo 만들기GIT 2024. 10. 9. 18:45
사이드 프로젝트를 초기 진행을 해보면서 사용자에게 서비스를 제공하는 방식으로
maven repo 제공 방식을 경험해볼 수 있는 기회가 생겨서 어떻게 구현했는지 기록해보았다!
github을 이용해서 maven repo를 구현해서 사용할 수 있게 제공해보았다.
mvn-repository-publish
maven repo 형식으로 서비스를 제공하기 위해서 mvn-repository-publish를 사용할 수 있다.
먼저, 서비스를 제공할 프로젝트 레포와 sdk를 제공할 mvn repo용으로 사용될 프로젝트 레파지토리를 만들어주어야 한다.
여기서는 간단하게 서비스 프로젝트는 test-project, mvn repo용으로 제공된 레포는 test-project-mvn-repo로 지칭한다.
mvn repository로 배포하고자 하는 프로젝트의 build.gradle.kts에 다음과 같이 추가한다.
// 배포하고자 하는 그룹과 버전을 설정 group = "com.test.project" version = "0.0.1-SNAPSHOT" // mavne-publish 플러그인 적용 apply { plugin("maven-publish") } // jar 파일 설정 tasks.jar { enabled = true archiveClassifier.set("") archiveFileName.set("test-project-${project.version}.jar") } // publish 옵션 설정 configure<PublishingExtension> { publications { create<MavenPublication>("mavenJava") { artifact(tasks.kotlinSourcesJar.get()) artifact(tasks.jar.get()) } } repositories { maven { // sdk 프로젝트를 제공할 github 주소를 입력한다 url = uri("https://maven.pkg.github.com/test-project/test-project-mvn-repo") credentials { username = project.findProperty("repo.user") as String? ?: System.getenv("TEST_PROJECT_REPO_ID") password = project.findProperty("repo.key") as String? ?: System.getenv("TEST_PROJECT_REPO_KEY") } } } } // sourceSets 설정 tasks.kotlinSourcesJar { archiveClassifier.set("sources") from(sourceSets.main.get().allSource) }
여기서 프로젝트의 REPO_ID와 REPO_KEY를 gradle 설정에 추가하거나 환경변수 설정을 통해 github repo의 env로 함께 등록해준다.
- gradle 설정 방법
- https://github.com/settings/tokens 이동
- Personal access tokens
- admin:org, repo, write:packages 토큰 발급
- .gradle/gradle.properties 설정
$ pwd /Users/username/ $ mkdir .gradle $ cd .gradle $ vi gradle.properties
repo.user={github username} repo.key={3에서 발급받은 토큰}
- 환경변수 설정 방법
- 자신이 사용 중인 셸의 설정 파일(i.e., .zshrc)에 반영
export TEST_PROJECT_REPO_ID={github username} export TEST_PROJECT_REPO_KEY={3에서 발급받은 토큰}
그 이후, 터미널에서 다음의 명령어로 publish 한다.
$ ./gradlew publish 혹은 gradle publish
publish가 완성되면 위에서 설정한 mvn repo 에서 배포 내용을 확인할 수 있다.
여기서는 https://maven.pkg.github.com/test-project/test-project-mvn-repo/packages 에서 내용을 확인할 수 있다.
단, 여기서 항상 버전에 따라서 생성이 되기 때문에, publish 할때마다 버전을 설정해주어야 함에 유의하자.
만들어진 mvn repository 사용하기
만들어진 mvn repository는 다음과 같이 사용할 수 있다.
여기서도 REPO_ID와 REPO_KEY를 gradle 설정에 반영하거나 환경 변수 설정을 통해 Github key 설정이 되어있어야 한다.
dependencies { implementation("com.test.project:test-project:0.0.1-SNAPSHOT") } repositories { maven { url = uri("https://maven.pkg.github.com/test-project/test-project-mvn-repo") credentials { username = project.findProperty("repo.user") as String? ?: System.getenv("TEST_PROJECT_REPO_ID") password = project.findProperty("repo.key") as String? ?: System.getenv("TEST_PROJECT_REPO_KEY") } } }
build를 하면 성공적으로 받아온 mvn repository를 import하여 사용할 수 있는 것을 확인할 수 있다!
github workflow로 mvn repository publish 자동화하기
원한다면, github workflow를 통해서 mvn repository에 publish 하는 작업을 자동화 할수도 있다.
단, 이 경우 위에서 설정한 TEST_PROJECT_REPO_ID, TEST_PROJECT_REPO_KEY를 github actions를 통해서 배포시 사용을 위해 organization의 secrets에 설정해야 한다.
- secrets 생성 안내 : https://docs.github.com/en/actions/security-for-github-actions/security-guides/using-secrets-in-github-actions
- organization -> security -> secrets and variables -> new organization secret을 통해 생성 가능
name: test-project-mvn-repo Github packages 개발 배포 테스트 on: workflow_dispatch: jobs: publish: runs-on: ubuntu-latest permissions: contents: read packages: write steps: - name: Checkout uses: actions/checkout@v3 - name: Set up JDK 17 uses: actions/setup-java@v3 with: java-version: '17' distribution: 'temurin' - name: Build and Publish run: | ./gradlew clean build publish env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} TEST_PROJECT_REPO_ID: ${{ secrets.TEST_PROJECT_REPO_ID }} TEST_PROJECT_REPO_KEY: ${{ secrets.TEST_PROJECT_REPO_KEY }}
해당 워크플로우가 돌면, 생성되는것을 확인 가능하다.
끝 ✨ ✨ ✨ ✨ ✨!!
- 참고 사이트 ✨
https://m.blog.naver.com/PostView.naver?isHttpsRedirect=true&blogId=occidere&logNo=221285584339
https://waspro.tistory.com/509?category=860683
https://waspro.tistory.com/510
https://docs.gradle.org/7.6.1/userguide/publishing_maven.html#publishing_maven:complete_example
https://doohee94.tistory.com/32
https://github.com/github/maven-plugins
https://jamcode.tistory.com/38
https://docs.gradle.org/current/userguide/publishing_maven.html
https://jha-memo.tistory.com/149
https://docs.github.com/en/actions/publishing-packages/publishing-java-packages-with-maven
https://docs.github.com/ko/packages/quickstart
https://docs.github.com/ko/enterprise-cloud@latest/actions/publishing-packages/publishing-
'GIT' 카테고리의 다른 글
Github Actions를 이용한 CI / CD 구현하기 (0) 2022.11.27 맥에서 Git Error permission denied to <Unknown User> 문제 발생시 (0) 2022.11.15 Github Actions (0) 2022.11.03 git 기능 구현을 다른 브랜치에서 작성했을 때 (0) 2022.01.25 Git Commit Convention (0) 2021.12.14