소개
이 가이드에서는 GitHub Packages 및 Maven 중앙 리포지토리에 Java 패키지를 게시하는 워크플로를 만드는 방법을 보여 줍니다. 단일 워크플로를 사용하면 패키지를 단일 리포지토리 또는 여러 리포지토리에 게시할 수 있습니다.
필수 조건
워크플로 파일 및 구성 옵션을 기본적으로 이해하는 것이 좋습니다. 자세한 내용은 워크플로 작성을(를) 참조하세요.
Gradle을 사용해 Java 패키지의 CI 워크플로를 만드는 것에 대한 자세한 내용은 Maven을 사용하여 Java 빌드 및 테스트을(를) 참조하세요.
또한 다음 사항을 기본적으로 이해하는 것이 유용할 수 있습니다.
패키지 구성 정보
pom.xml 파일의 groupId
및 artifactId
필드는 레지스트리에서 패키지를 레지스트리에 연결하는 데 사용하는 패키지의 고유 식별자를 만듭니다. 자세한 내용은 Apache Maven 문서에서 중앙 리포지토리에 아티팩트 업로드 가이드를 참조하세요.
Warning
Apache Maven 패키지는 명명 규칙을 따라야 하므로 artifactId
필드에 소문자, 숫자, 하이픈만 포함해야 합니다. 자세한 내용은 maven.apache.org 설명서에서 Maven 좌표의 명명 규칙을 참조 하세요. 아티팩트 이름에 대문자를 사용하면 422 처리할 수 없는 엔터티 응답이 표시됩니다.
pom.xml 파일에는 Maven에서 패키지를 배포할 배포 관리 리포지토리에 대한 구성도 포함되어 있습니다. 각 리포지토리에는 이름과 배포 URL이 있어야 합니다. 이러한 리포지토리에 대한 인증은 Maven을 실행하는 사용자의 홈 디렉터리에 있는 .m2/settings.xml 파일에서 구성할 수 있습니다.
이 setup-java
작업을 사용하여 해당 리포지토리에 대한 인증뿐만 아니라 배포 리포지토리를 구성할 수 있습니다. 자세한 내용은 setup-java
를 참조하세요.
Maven 중앙 리포지토리에 패키지 게시
새 릴리스를 만들 때마다 워크플로를 트리거하여 패키지를 게시할 수 있습니다. 아래 예제의 워크플로는 release
이벤트가 created
형식으로 트리거될 때 실행됩니다. 이 워크플로는 CI 테스트를 통과할 경우 Maven 중앙 리포지토리에 패키지를 게시합니다. release
이벤트의 자세한 내용은 워크플로를 트리거하는 이벤트을(를) 참조하세요.
이 워크플로에서는 setup-java
작업을 사용할 수 있습니다. 이 작업은 지정된 버전의 JDK를 PATH
에 설치하지만 패키지 게시를 위한 Maven _settings.xml_도 구성합니다. 기본적으로 설정 파일은 GitHub Packages에 대해 구성되지만 Maven 중앙 리포지토리와 같은 다른 패키지 레지스트리에 배포하도록 구성할 수도 있습니다. 이미 _pom.xml_에 배포 관리 리포지토리가 구성된 경우 setup-java
작업 호출 중에 해당 id
를 지정할 수 있습니다.
예를 들어 OSSRH 호스팅 프로젝트를 통해 Maven 중앙 리포지토리에 배포하는 경우 _pom.xml_은 id
가 ossrh
인 배포 관리 리포지토리를 지정할 수 있습니다.
<project ...> ... <distributionManagement> <repository> <id>ossrh</id> <name>Central Repository OSSRH</name> <url>https://oss.sonatype.org/service/local/staging/deploy/maven2/</url> </repository> </distributionManagement> </project>
<project ...>
...
<distributionManagement>
<repository>
<id>ossrh</id>
<name>Central Repository OSSRH</name>
<url>https://oss.sonatype.org/service/local/staging/deploy/maven2/</url>
</repository>
</distributionManagement>
</project>
이 구성을 사용하면 setup-java
작업에 리포지토리 관리 id
를 지정하여 Maven 중앙 리포지토리에 패키지를 게시하는 워크플로를 만들 수 있습니다. 또한 리포지토리에 인증하기 위해 사용자 이름 및 암호를 포함하는 환경 변수를 제공해야 합니다.
배포 단계에서는 환경 변수를 리포지토리에 인증하는 사용자 이름 및 인증할 암호 또는 토큰으로 구성한 비밀로 설정해야 합니다. 자세한 내용은 GitHub Actions에서 비밀 사용을(를) 참조하세요.
name: Publish package to the Maven Central Repository on: release: types: [created] jobs: publish: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - name: Set up Maven Central Repository uses: actions/setup-java@v4 with: java-version: '11' distribution: 'temurin' server-id: ossrh server-username: MAVEN_USERNAME server-password: MAVEN_PASSWORD - name: Publish package run: mvn --batch-mode deploy env: MAVEN_USERNAME: ${{ secrets.OSSRH_USERNAME }} MAVEN_PASSWORD: ${{ secrets.OSSRH_TOKEN }}
name: Publish package to the Maven Central Repository
on:
release:
types: [created]
jobs:
publish:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Set up Maven Central Repository
uses: actions/setup-java@v4
with:
java-version: '11'
distribution: 'temurin'
server-id: ossrh
server-username: MAVEN_USERNAME
server-password: MAVEN_PASSWORD
- name: Publish package
run: mvn --batch-mode deploy
env:
MAVEN_USERNAME: ${{ secrets.OSSRH_USERNAME }}
MAVEN_PASSWORD: ${{ secrets.OSSRH_TOKEN }}
이 워크플로는 다음 단계를 수행합니다.
-
프로젝트 리포지토리의 복사본을 체크 아웃합니다.
-
Java JDK를 설정하고
MAVEN_USERNAME
및MAVEN_PASSWORD
환경 변수를 사용하여ossrh
리포지토리에 대한 인증을 추가하도록 Maven settings.xml 파일도 구성합니다. -
mvn --batch-mode deploy
명령을 실행하여ossrh
리포지토리에 게시합니다.MAVEN_USERNAME
환경 변수는OSSRH_USERNAME
비밀의 내용으로 설정되고,MAVEN_PASSWORD
환경 변수는OSSRH_TOKEN
비밀의 내용으로 설정됩니다.워크플로에서 비밀을 사용하는 방법에 대한 자세한 내용은 GitHub Actions에서 비밀 사용을(를) 참조하세요.
GitHub Packages에 패키지 게시
새 릴리스를 만들 때마다 워크플로를 트리거하여 패키지를 게시할 수 있습니다. 아래 예제의 워크플로는 release
이벤트가 created
형식으로 트리거될 때 실행됩니다. 이 워크플로는 CI 테스트를 통과할 경우 GitHub Packages에 패키지를 게시합니다. release
이벤트의 자세한 내용은 워크플로를 트리거하는 이벤트을(를) 참조하세요.
이 워크플로에서는 setup-java
작업을 사용할 수 있습니다. 이 작업은 지정된 버전의 JDK를 PATH
에 설치하고 패키지를 GitHub Packages에 게시하기 위한 Maven _settings.xml_도 설정합니다. 생성된 _settings.xml_은 GITHUB_ACTOR
환경 변수를 사용자 이름으로 사용하고 GITHUB_TOKEN
환경 변수를 암호로 사용하여 id
가 github
인 서버에 대한 인증을 정의합니다. GITHUB_TOKEN
환경 변수에는 특수 GITHUB_TOKEN
비밀 값이 할당됩니다.
GITHUB_TOKEN
비밀은 워크플로의 작업이 시작될 때마다 리포지토리에 대한 액세스 토큰으로 설정됩니다. contents
권한에 대한 읽기 권한을 부여하고 packages
권한에 대한 쓰기 권한을 부여하려면 워크플로 파일에서 이 액세스 토큰에 대한 사용 권한을 설정해야 합니다. 자세한 내용은 "자동 토큰 인증" 항목을 참조하세요.
Maven 기반 프로젝트의 경우 GitHub Packages 엔드포인트를 가리키는 github
의 id
로 pom.xml 파일에 배포 리포지토리를 만들면 이러한 설정을 사용할 수 있습니다.
예를 들어 조직 이름이 “octocat”이고 리포지토리 이름이 “hello-world”인 경우 _pom.xml_의 GitHub Packages 구성은 아래 예제와 유사합니다.
<project ...> ... <distributionManagement> <repository> <id>github</id> <name>GitHub Packages</name> <url>https://maven.pkg.github.com/octocat/hello-world</url> </repository> </distributionManagement> </project>
<project ...>
...
<distributionManagement>
<repository>
<id>github</id>
<name>GitHub Packages</name>
<url>https://maven.pkg.github.com/octocat/hello-world</url>
</repository>
</distributionManagement>
</project>
이 구성을 사용하면 자동으로 생성된 _settings.xml_을 사용하여 GitHub Packages에 패키지를 게시하는 워크플로를 만들 수 있습니다.
name: Publish package to GitHub Packages on: release: types: [created] jobs: publish: runs-on: ubuntu-latest permissions: contents: read packages: write steps: - uses: actions/checkout@v4 - uses: actions/setup-java@v4 with: java-version: '11' distribution: 'temurin' - name: Publish package run: mvn --batch-mode deploy env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
name: Publish package to GitHub Packages
on:
release:
types: [created]
jobs:
publish:
runs-on: ubuntu-latest
permissions:
contents: read
packages: write
steps:
- uses: actions/checkout@v4
- uses: actions/setup-java@v4
with:
java-version: '11'
distribution: 'temurin'
- name: Publish package
run: mvn --batch-mode deploy
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
이 워크플로는 다음 단계를 수행합니다.
-
프로젝트 리포지토리의 복사본을 체크 아웃합니다.
-
Java JDK를 설정하고 Maven settings.xml 파일을 자동으로 구성하여
GITHUB_TOKEN
환경 변수를 사용하도록github
Maven 리포지토리에 대한 인증을 추가합니다. -
mvn --batch-mode deploy
명령을 실행하여 GitHub Packages에 게시합니다.GITHUB_TOKEN
환경 변수는GITHUB_TOKEN
비밀의 내용으로 설정됩니다.permissions
키는GITHUB_TOKEN
에 부여된 액세스 권한을 지정합니다.워크플로에서 비밀을 사용하는 방법에 대한 자세한 내용은 GitHub Actions에서 비밀 사용을(를) 참조하세요.
Maven 중앙 리포지토리 및 GitHub Packages에 패키지 게시
각 레지스트리에 대해 setup-java
작업을 사용하여 Maven 중앙 리포지토리 및 GitHub Packages 모두에 패키지를 게시할 수 있습니다.
pom.xml 파일에 GitHub 리포지토리 및 Maven 중앙 리포지토리 공급자 모두에 대한 배포 관리 리포지토리가 포함되어 있는지 확인합니다. 예를 들어 OSSRH 호스팅 프로젝트를 통해 중앙 리포지토리에 배포하는 경우 id
을 ossrh
로 설정하여 배포 관리 리포지토리에 지정하고 GitHub Packages는 id
가 github
로 설정된 배포 관리 리포지토리에 있습니다.
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@v4 - name: Set up Java for publishing to Maven Central Repository uses: actions/setup-java@v4 with: java-version: '11' distribution: 'temurin' server-id: ossrh server-username: MAVEN_USERNAME server-password: MAVEN_PASSWORD - name: Publish to the Maven Central Repository run: mvn --batch-mode deploy env: MAVEN_USERNAME: ${{ secrets.OSSRH_USERNAME }} MAVEN_PASSWORD: ${{ secrets.OSSRH_TOKEN }} - name: Set up Java for publishing to GitHub Packages uses: actions/setup-java@v4 with: java-version: '11' distribution: 'temurin' - name: Publish to GitHub Packages run: mvn --batch-mode deploy env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
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@v4
- name: Set up Java for publishing to Maven Central Repository
uses: actions/setup-java@v4
with:
java-version: '11'
distribution: 'temurin'
server-id: ossrh
server-username: MAVEN_USERNAME
server-password: MAVEN_PASSWORD
- name: Publish to the Maven Central Repository
run: mvn --batch-mode deploy
env:
MAVEN_USERNAME: ${{ secrets.OSSRH_USERNAME }}
MAVEN_PASSWORD: ${{ secrets.OSSRH_TOKEN }}
- name: Set up Java for publishing to GitHub Packages
uses: actions/setup-java@v4
with:
java-version: '11'
distribution: 'temurin'
- name: Publish to GitHub Packages
run: mvn --batch-mode deploy
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
이 워크플로는 setup-java
작업을 두 번 호출합니다. setup-java
작업이 실행될 때마다 패키지 게시를 위해 Maven settings.xml 파일을 덮어씁니다. 리포지토리 인증을 위해 settings.xml 파일은 리포지토리 관리 리포지토리 id
, 사용자 이름, 암호를 참조합니다.
이 워크플로는 다음 단계를 수행합니다.
-
프로젝트 리포지토리의 복사본을 체크 아웃합니다.
-
처음으로
setup-java
를 호출합니다. 이렇게 하면ossrh
리포지토리에 대한 Maven settings.xml 파일이 구성되고 인증 옵션이 다음 단계에서 정의되는 환경 변수로 설정됩니다. -
mvn --batch-mode deploy
명령을 실행하여ossrh
리포지토리에 게시합니다.MAVEN_USERNAME
환경 변수는OSSRH_USERNAME
비밀의 내용으로 설정되고,MAVEN_PASSWORD
환경 변수는OSSRH_TOKEN
비밀의 내용으로 설정됩니다. -
두 번째로
setup-java
를 호출합니다. 그러면 GitHub Packages에 대한 Maven settings.xml 파일이 자동으로 구성됩니다. -
mvn --batch-mode deploy
명령을 실행하여 GitHub Packages에 게시합니다.GITHUB_TOKEN
환경 변수는GITHUB_TOKEN
비밀의 내용으로 설정됩니다.permissions
키는GITHUB_TOKEN
에 부여된 액세스 권한을 지정합니다.워크플로에서 비밀을 사용하는 방법에 대한 자세한 내용은 GitHub Actions에서 비밀 사용을(를) 참조하세요.