배경
현재 CI에서 릴리즈 프로세스를 Git 태그 기반으로 운영하려고 하나,
on.push.tags 트리거가 정의되어 있지 않아 태그 푸시 시 워크플로우가 실행되지 않으며,
- 태그가 잡히더라도 Maven Repository 배포(
gradlew publish 등) 단계가 없습니다.
이로 인해 릴리즈 태그를 생성해도 아티팩트가 리포지토리에 배포되지 않습니다.
해야 할 일 (Tasks)
수용 기준 (Acceptance Criteria)
- 태그
v1.2.3 푸시 시 워크플로우가 자동 실행된다.
- 빌드가 성공하면 Maven Repo에
1.2.3 버전이 배포된다.
- 실패 시 로그에 버전·리포지토리·아티팩트 식별이 가능하다.
- SNAPSHOT 버전은 릴리즈 job에서 차단된다.
제안 구현 (GitHub Actions 예시)
name: Release
on:
push:
tags:
- 'v*.*.*' # e.g. v1.2.3
jobs:
release:
if: startsWith(github.ref, 'refs/tags/')
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
with:
fetch-depth: 0
- name: Set up Java
uses: actions/setup-java@v4
with:
distribution: temurin
java-version: '21'
cache: gradle
server-id: ossrh # 사설 Nexus면 nexus 로 변경
server-username: MAVEN_USERNAME
server-password: MAVEN_PASSWORD
gpg-private-key: ${{ secrets.GPG_PRIVATE_KEY }}
gpg-passphrase: ${{ secrets.GPG_PASSPHRASE }}
- name: Derive version from tag
run: |
echo "VERSION=${GITHUB_REF_NAME#v}" >> $GITHUB_ENV
if [[ "$VERSION" == *"-SNAPSHOT"* ]]; then
echo "Do not release SNAPSHOT versions from tags"; exit 1
fi
echo "Release version: $VERSION"
- name: Build
run: ./gradlew -Pversion=$VERSION clean build --stacktrace
# Maven Central(sonatype) 사용하는 경우
- name: Publish (Sonatype)
if: env.VERSION != ''
run: |
./gradlew -Pversion=$VERSION publish closeAndReleaseSonatypeStagingRepository
# 사설 Nexus 사용하는 경우 (위 단계 대신 이 단계 사용)
# - name: Publish (Private Nexus)
# run: ./gradlew -Pversion=$VERSION publish
env:
MAVEN_USERNAME: ${{ secrets.OSSRH_USERNAME }} # or NEXUS_USERNAME
MAVEN_PASSWORD: ${{ secrets.OSSRH_PASSWORD }} # or NEXUS_PASSWORD
추가 메모
- 태그 규칙:
vMAJOR.MINOR.PATCH (예: v0.5.3)
- 멀티모듈일 경우
publishing 설정이 각 모듈에 적용되어 있는지 확인
- Gradle
signing/publishing 플러그인 설정이 CI에서도 동작하도록 gradle.properties/환경변수 정리
배경
현재 CI에서 릴리즈 프로세스를 Git 태그 기반으로 운영하려고 하나,
on.push.tags트리거가 정의되어 있지 않아 태그 푸시 시 워크플로우가 실행되지 않으며,gradlew publish등) 단계가 없습니다.이로 인해 릴리즈 태그를 생성해도 아티팩트가 리포지토리에 배포되지 않습니다.
해야 할 일 (Tasks)
on.push.tags: ['v*.*.*']if: startsWith(github.ref, 'refs/tags/'))vX.Y.Z→X.Y.Z) 후 GradlePversion에 주입./gradlew clean build후./gradlew publish실행MAVEN_USERNAME,MAVEN_PASSWORD,GPG_PRIVATE_KEY,GPG_PASSPHRASE등SNAPSHOT버전 금지수용 기준 (Acceptance Criteria)
v1.2.3푸시 시 워크플로우가 자동 실행된다.1.2.3버전이 배포된다.제안 구현 (GitHub Actions 예시)
추가 메모
vMAJOR.MINOR.PATCH(예:v0.5.3)publishing설정이 각 모듈에 적용되어 있는지 확인signing/publishing플러그인 설정이 CI에서도 동작하도록gradle.properties/환경변수 정리