소개
이 가이드에서는 GitHub Packages 및 Maven 중앙 리포지토리에 Java 패키지를 게시하는 워크플로를 만드는 방법을 보여 줍니다. 단일 워크플로를 사용하면 패키지를 단일 리포지토리 또는 여러 리포지토리에 게시할 수 있습니다.
필수 조건
워크플로 파일 및 구성 옵션을 기본적으로 이해하는 것이 좋습니다. 자세한 내용은 "Github Actions 알아보기"을 참조하세요.
Maven을 사용하여 Java 프로젝트에 대한 CI 워크플로를 만드는 방법에 대한 자세한 내용은 "Maven을 사용하여 Java 빌드 및 테스트.
또한 다음 사항을 기본적으로 이해하는 것이 유용할 수 있습니다.
- "npm 레지스트리 작업"
- "변수"
- "암호화된 비밀"
- "자동 토큰 인증"
패키지 구성 정보
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>
이 구성을 사용하면 setup-java
작업에 리포지토리 관리 id
를 지정하여 Maven 중앙 리포지토리에 패키지를 게시하는 워크플로를 만들 수 있습니다. 또한 리포지토리에 인증하기 위해 사용자 이름 및 암호를 포함하는 환경 변수를 제공해야 합니다.
배포 단계에서는 환경 변수를 리포지토리에 인증하는 사용자 이름 및 인증할 암호 또는 토큰으로 구성한 비밀로 설정해야 합니다. 자세한 내용은 "암호화된 비밀"을 참조하세요.
name: Publish package to the Maven Central Repository
on:
release:
types: [created]
jobs:
publish:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: Set up Maven Central Repository
uses: actions/setup-java@v3
with:
java-version: '11'
distribution: 'adopt'
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 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>
이 구성을 사용하면 자동으로 생성된 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@v3
- uses: actions/setup-java@v3
with:
java-version: '11'
distribution: 'adopt'
- 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
에 부여된 액세스 권한을 지정합니다.워크플로에서 비밀을 사용하는 방법에 대한 자세한 내용은 "암호화된 비밀 참조하세요.
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@v3
- name: Set up Java for publishing to Maven Central Repository
uses: actions/setup-java@v3
with:
java-version: '11'
distribution: 'adopt'
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@v3
with:
java-version: '11'
distribution: 'adopt'
- 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
에 부여된 액세스 권한을 지정합니다.워크플로에서 비밀을 사용하는 방법에 대한 자세한 내용은 "암호화된 비밀 참조하세요.