Java 라이브러리를 배포해보자✉️ CD사용!

👲 Neis Api를 간단하게 가져올 수 있는 라이브러리를 만든 과정을 이야기해봅니다.

도움을 주신 smoothbear, shw0471님 감사합니다😘

Neis-Api란?

교육정보개방포털에서 제공하는 Api를 Java에 맞게 Parsing하여 Object로 반환해주는 Api입니다.

제작하게된 이유

급식패스(GsPass)에서 급식을 가져오는 부분을 만들다보니 이걸 라이브러리화 하는것은 어떨까? 라는 고민으로부터 시작되었습니다.

제작과정

Sonatype 이슈 발행

일단 sonatype에 회원가입부터 하자!


상단 바를 보면 만들기버튼이 있다. 이 버튼으로 이슈를 발행한다.


입력해야하는 정보는

  • 이슈 유형 : New Project
  • 요약 : 프로젝트 / 라이브러리 명
  • 설명 : 프로젝트 / 라이브러리의 설명
  • Group Id : 프로젝트마다 구별할 수 있는 고유한 이름 ex)io.github.[깃허브 아이디]
  • Project URL : 프로젝트 소개사이트 입력 ex)https://github.com/leeseojune53/yatudy
  • SCM url : 형상서버 주소
    ex) https://github.com
  • Username(s) : 회원가입 시 입력했던 Username를 입력한다. 여러 명 입력할 수 있다.

이슈를 등록하면 Group Id에 적었던 곳에 인증을 하라는 Comment가 달린다. 깃허브를 기준으로 OSSRH-70244와 같은 이슈넘버로 Public Repository를 만들면 인증된다.

저 Comment를 보면 알 수 있겠지만, 이제 Group Id로 com.github.*는 사용할 수 없다고한다. 대신 io.github.*로 사용하면 된다.

라이브러리를 Maven에 올릴 준비는 끝났다. 하지만....

이렇게 간단하게 끝나지 않았다..😭😭

GPG설정..!

사전에 Gnupg가 필요합니다!!

gpg --gen-key를 실행한 이후 정보를 입력하면

public key(예시 : abcd1234)를 발급받을 수 있습니다.

gpg --output 파일명.asc --armor --export-secret-key [이메일입력]
을 실행시키면 private key를 발급받을 수 있습니다.

gpg -c .\파일명.asc를 실행시켜 암호화를 진행합니다.

그리고..

gradle.properties를 만들어줍니다.

gradle.properties

signing.gnupg.keyName=public key
signing.gnupg.passphrase=password

gpg -c .\gradle.properties를 실행시켜 암호화를 진행합니다.

결과적으로 파일명.asc.gpg와 gradle.properties.gpg가 생성됩니다.

build.gradle 설정

우리가 Maven Central Repository에 배포하려면 javadoc jar와 source jar도 같이 올려야한다.
물론 위에서 했던 GPG도 꼭 해야 배포할 수 있다!

여기를 봐주세요!

Github Actions CD

name: Publish package to the Maven Central Repository and GitHub Packages
on:
  release:
    types: [ created ]
jobs:
  publish:
    runs-on: ubuntu-latest
    permissions:
      contents: read
      packages: write
    steps:
      - uses: actions/checkout@v2
      - name: Set up Java
        uses: actions/setup-java@v2
        with:
          java-version: '11'
          distribution: 'adopt'
      - name: Build packages
        run: gradle build
      - name: Grant permission to deploy.sh
        run: chmod 755 .github/workflows/commands/deploy.sh
      - name: Publish to the Maven Central Repository
        run: .github/workflows/commands/deploy.sh
        env:
          MAVEN_USERNAME: ${{ secrets.OSSRH_USERNAME }}
          MAVEN_PASSWORD: ${{ secrets.OSSRH_TOKEN }}
          GITHUB_TOKEN: ${{ secrets.GH_TOKEN }}
          GPG_SECRET: ${{ secrets.GPG_SECRET }}

위 코드에 들어가는 deploy.sh는

set -euo pipefail
IFS=$'\n\t'

function cleanup {
    echo "🧹 Cleanup..."
    rm -f gradle.properties golo-dev-sign.asc
}

trap cleanup SIGINT SIGTERM ERR EXIT

echo "🚀 Preparing to deploy..."

echo "🔑 Decrypting files..."

gpg --quiet --batch --yes --decrypt --passphrase="${GPG_SECRET}" \
    --output 파일명.asc .github/workflows/commands/gpg/파일명.asc.gpg

gpg --quiet --batch --yes --decrypt --passphrase="${GPG_SECRET}" \
    --output gradle.properties .github/workflows/commands/gpg/gradle.properties.gpg

gpg --fast-import --no-tty --batch --yes 파일명.asc

echo "📦 Publishing..."

gradle publish

echo "✅ Done!"

여기까지 오셨다면 거의 다 하셨습니다!!

Github에서 release를 생성하시면 위의 Github Actions가 실행되고 deploy.sh에서 gradle publish가 되며 업로드가 될것입니다.

이게 끝인줄알았지? 힣

publish가 성공적으로 끝나도 해야하는 작업이 더 있습니다 ㅎㅎ..
여기를 들어가서 로그인을 한 후 staging repository탭으로 들어가면

이런 화면이 나옵니다. publish가된 Repository를 선택한 후 close를 해주고, Release를 하면 됩니다.
30분 정도 기다리면


🥳최대 2시간 정도 기다리면 업로드된다고 메일이 옵니다!🥳

마지막으로...

라이브러리 배포가 처음이라 미숙한 많을텐데 끝까지 봐주셔서 감사합니다🤠
코드상 오류가 있다면 이슈를 날려주시고, 궁금한점은 댓글 달아주세요!

제작자 Github입니다!

참고한 자료
Gradle Docs
Gradle Docs Plugin

좋은 웹페이지 즐겨찾기