소개
이 가이드에서는 GitHub Packages 및 Maven 중앙 리포지토리에 Java 패키지를 게시하는 워크플로를 만드는 방법을 보여 줍니다. 단일 워크플로를 사용하면 패키지를 단일 리포지토리 또는 여러 리포지토리에 게시할 수 있습니다.
필수 조건
워크플로 파일 및 구성 옵션을 기본적으로 이해하는 것이 좋습니다. 자세한 내용은 "워크플로 작성"을(를) 참조하세요.
Gradle을 사용해 Java 패키지의 CI 워크플로를 만드는 것에 대한 자세한 내용은 "Maven을 사용하여 Java 빌드 및 테스트"을(를) 참조하세요.
또한 다음 사항을 기본적으로 이해하는 것이 유용할 수 있습니다.
패키지 구성 정보
pom.xml 파일의 groupId
및 artifactId
필드는 레지스트리에서 패키지를 레지스트리에 연결하는 데 사용하는 패키지의 고유 식별자를 만듭니다. 자세한 내용은 Apache Maven 문서에서 중앙 리포지토리에 아티팩트 업로드 가이드를 참조하세요.
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에서 비밀 사용"을(를) 참조하세요.