개인 GitHub 패키지 레지스트리에서 GitHub 워크플로우 및 Maven Dependencies 사용
2019년 5월GitHub introduced the GitHub Package Registry: 전통적인 가방 등록의 대체품, 예를 들어Sonatype Nexus.그 동안 나는 그것에 대해 아무런 소용이 없었다. 왜냐하면 우리의 모든 내부 의존 관계는 우리의 개인 회사인 Artifactory의 실례에 저장되어 있기 때문이다.
곧 2020년: 연초에 우리는 개인적으로 ninkik 일을 시작했다.GitHub 및 GitHub 작업은 처음부터 저장소를 저장하고 CI/CD 작업을 수행하는 데 사용되었습니다.GitHub Actions CI 프로세스에는 Dellcompany’s Artifactory의 일부 Maven 의존 항목이 포함되어 있습니다.
프로젝트 재편 필요
2020년 11월에 우리는 어쩔 수 없이 닌키크의 프로젝트 구조를 재조직했다.
Maven 가공소재를 GitHub 패키지 레지스트리에 게시
저희 라이브러리 A에 대해 간단한 스크립트가 있습니다.Artifactory를 위해 새로운 스크립트를 준비했습니다.나는 이러한 과정을 마벤트 목표release:prepare와 release:perform로 전환하고 싶지 않다고 분명히 밝혔다.
반대로, 나는 단지 우리의 스크립트와 deploy:deploy 목표를 사용하여 모든 구축에 GitHub 패키지 등록 센터에 새로운 부품을 발표하고 싶을 뿐이다.
pom 조정.세일즈 관리에 사용되는 xml
deploy:deploy
대상을 사용하려면 distributionManagement
탭에 새 저장소를 설정해야 합니다.예를 들어, Maven 구성 파일을 사용하여 추가 저장소를 활성화하기로 결정했습니다.
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.dreitier</groupId>
<artifactId>library-a-parent</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>pom</packaging>
<!-- ... -->
<profiles>
<profile>
<id>github</id>
<distributionManagement>
<repository>
<id>github</id>
<name>GitHub Packages</name>
<url>https://maven.pkg.github.com/dreitier/library-a</url>
</repository>
</distributionManagement>
</profile>
</profiles>
<!-- ... -->
</project>
Maven의 pom.xml
명령줄 파라미터를 사용합니다. 현재 Maven 개요 파일 -P
을 사용할 수 있습니다.로컬에서 구성을 테스트하려면 GitHub acocount에 대해 Personal Access Token를 생성해야 합니다.
GitHub 패키지 레지스트리에 가공소재를 업로드하려면 개인 액세스 토큰에 다음 범위github
가 있어야 합니다.
Mavenwrite:packages
에 개인 액세스 토큰을 추가해야 합니다.
<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0
http://maven.apache.org/xsd/settings-1.0.0.xsd">
<servers>
<server>
<id>github</id>
<username>your-username</username>
<password>your-personal-access-token</password>
</server>
</servers>
</settings>
로컬에서 현재 사용 가능
mvn -Pgithub deploy
GitHub 운영 워크플로우
GitHub 작업 흐름에서 이 부품을 발표하는 것은 매우 간단합니다.settings.xml
에 몇 줄만 추가하면 됩니다.
on:
push:
branches: ["**"]
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Set up JDK 11.0.2
uses: actions/setup-java@v1
with:
java-version: 11.0
- name: Deploy
run: mvn -B -Pgithub deploy
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
.github/workflows/maven.yml
Maven 설정은 자동으로 설정되지 않습니다.적당한 배치 설정이 있는 xml입니다.그것은 actions/setup-java
변수를 인용한다.${env.GITHUB_TOKEN}
는 개인 영패로 자동으로 사용할 수 있으며 현재 GitHub 작업 흐름의 저장소에 권한을 분배한다.
경고
등록표에 있는 오래된 소프트웨어 패키지를 정리해야 합니다.제출률과 패키지 크기에 따라 저장소가 패키지 등록표의 할당량에 도달합니다.
현재 최신 n 버전을 제외하고는 발표된 모든 패키지를 버릴 수 있는 사용자 정의 작업이 없습니다.actions/delete-package-versions 현재 최신 버전 n개만 포기할 수 있습니다.
다음 GitHub 작업 빌드에서는 가공소재가 게시되고 저장소의 대시보드에서 팝업됩니다.
GitHub 패키지 레지스트리의 가공소재에 따라 다름
ninkik에서, 나는 어쩔 수 없이 GitHub 패키지 등록표로 낡은 Artifactory Maven 등록표를 교체해야 한다.이전 단계에서 Maven GITHUB_TOKEN
프로필을 로컬에서 가져왔습니다.내 예에서는 Ninkikgithub
에 GitHub 패키지 등록 라이브러리를 추가했습니다.
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.dreitier</groupId>
<artifactId>ninkik-parent</artifactId>
<packaging>pom</packaging>
<profiles>
<profile>
<id>github</id>
<repositories>
<repository>
<id>central</id>
<url>https://repo1.maven.org/maven2</url>
<releases><enabled>true</enabled></releases>
<snapshots><enabled>true</enabled></snapshots>
</repository>
<repository>
<id>github</id>
<name>GH dreitier</name>
<url>https://maven.pkg.github.com/dreitier/library-a</url>
<snapshots><enabled>true</enabled></snapshots>
<releases><enabled>true</enabled></releases>
</repository>
</repositories>
</profile>
</profiles>
<modules>
<!-- ... -->
</project>
이러한 설정이 있으면 로컬 기계의 일반 mvn 패키지가 작동할 수 있습니다.필요한 모든 Depdenency는 Maven Central 또는 GitHub 패키지 레지스트리에서 다운로드할 수 있습니다.
GitHub 작업 흐름에서 GitHub 패키지 레지스트리 저장소 사용
위의 GitHub 작업 흐름도 nkik를 수정하지 않은 상태에서 사용할 수 있기를 바랍니다.하지만 GitHub 작업에서 다음 오류가 발생했습니다.
[INFO] Downloading from github: https://maven.pkg.github.com/dreitier/library-a/library-a.jar
[DEBUG] Writing tracking file /home/runner/.m2/repository/com/dreitier/library-a/library-a.jar.lastUpdated
[INFO] ------------------------------------------------------------------------
[INFO] Reactor Summary for ninkik-parent 0.0.1-SNAPSHOT:
[INFO]
[INFO] ninkik-parent ...................................... SUCCESS [ 0.007 s]
[INFO] ninkik api spec .................................... FAILURE [ 4.620 s]
[INFO] ...
[INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 23.400 s
[INFO] Finished at: 2020-12-16T21:34:31Z
[INFO] ------------------------------------------------------------------------
Error: Failed to execute goal on project ninkik-api-spec: Could not resolve dependencies for project com.dreitier:ninkik-api-spec:jar:0.0.1-SNAPSHOT: Could not find artifact com.dreitier.library-a-data-commons:jar:0.0.38-SNAPSHOT in central (https://repo1.maven.org/maven2) -> [Help 1]
org.apache.maven.lifecycle.LifecycleExecutionException: Failed to execute goal on project ninkik-api-spec: Could not resolve dependencies for project com.dreitier:ninkik-api-spec:jar:0.0.1-SNAPSHOT: Could not find artifact com.dreitier.library-a-data-commons:jar:0.0.38-SNAPSHOT in central (https://repo1.maven.org/maven2)
at org.apache.maven.lifecycle.internal.LifecycleDependencyResolver.getDependencies (LifecycleDependencyResolver.java:269)
The resolution of the library-a depdenency could neither be found in Maven Central (that’s correct) nor in the GitHub Package Registry.
한층 더 읽은 후에 나는 원인을 찾았다.
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.dreitier</groupId>
<artifactId>library-a-parent</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>pom</packaging>
<!-- ... -->
<profiles>
<profile>
<id>github</id>
<distributionManagement>
<repository>
<id>github</id>
<name>GitHub Packages</name>
<url>https://maven.pkg.github.com/dreitier/library-a</url>
</repository>
</distributionManagement>
</profile>
</profiles>
<!-- ... -->
</project>
<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0
http://maven.apache.org/xsd/settings-1.0.0.xsd">
<servers>
<server>
<id>github</id>
<username>your-username</username>
<password>your-personal-access-token</password>
</server>
</servers>
</settings>
mvn -Pgithub deploy
on:
push:
branches: ["**"]
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Set up JDK 11.0.2
uses: actions/setup-java@v1
with:
java-version: 11.0
- name: Deploy
run: mvn -B -Pgithub deploy
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
ninkik에서, 나는 어쩔 수 없이 GitHub 패키지 등록표로 낡은 Artifactory Maven 등록표를 교체해야 한다.이전 단계에서 Maven
GITHUB_TOKEN
프로필을 로컬에서 가져왔습니다.내 예에서는 Ninkikgithub
에 GitHub 패키지 등록 라이브러리를 추가했습니다.<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.dreitier</groupId>
<artifactId>ninkik-parent</artifactId>
<packaging>pom</packaging>
<profiles>
<profile>
<id>github</id>
<repositories>
<repository>
<id>central</id>
<url>https://repo1.maven.org/maven2</url>
<releases><enabled>true</enabled></releases>
<snapshots><enabled>true</enabled></snapshots>
</repository>
<repository>
<id>github</id>
<name>GH dreitier</name>
<url>https://maven.pkg.github.com/dreitier/library-a</url>
<snapshots><enabled>true</enabled></snapshots>
<releases><enabled>true</enabled></releases>
</repository>
</repositories>
</profile>
</profiles>
<modules>
<!-- ... -->
</project>
이러한 설정이 있으면 로컬 기계의 일반 mvn 패키지가 작동할 수 있습니다.필요한 모든 Depdenency는 Maven Central 또는 GitHub 패키지 레지스트리에서 다운로드할 수 있습니다.GitHub 작업 흐름에서 GitHub 패키지 레지스트리 저장소 사용
위의 GitHub 작업 흐름도 nkik를 수정하지 않은 상태에서 사용할 수 있기를 바랍니다.하지만 GitHub 작업에서 다음 오류가 발생했습니다.
[INFO] Downloading from github: https://maven.pkg.github.com/dreitier/library-a/library-a.jar
[DEBUG] Writing tracking file /home/runner/.m2/repository/com/dreitier/library-a/library-a.jar.lastUpdated
[INFO] ------------------------------------------------------------------------
[INFO] Reactor Summary for ninkik-parent 0.0.1-SNAPSHOT:
[INFO]
[INFO] ninkik-parent ...................................... SUCCESS [ 0.007 s]
[INFO] ninkik api spec .................................... FAILURE [ 4.620 s]
[INFO] ...
[INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 23.400 s
[INFO] Finished at: 2020-12-16T21:34:31Z
[INFO] ------------------------------------------------------------------------
Error: Failed to execute goal on project ninkik-api-spec: Could not resolve dependencies for project com.dreitier:ninkik-api-spec:jar:0.0.1-SNAPSHOT: Could not find artifact com.dreitier.library-a-data-commons:jar:0.0.38-SNAPSHOT in central (https://repo1.maven.org/maven2) -> [Help 1]
org.apache.maven.lifecycle.LifecycleExecutionException: Failed to execute goal on project ninkik-api-spec: Could not resolve dependencies for project com.dreitier:ninkik-api-spec:jar:0.0.1-SNAPSHOT: Could not find artifact com.dreitier.library-a-data-commons:jar:0.0.38-SNAPSHOT in central (https://repo1.maven.org/maven2)
at org.apache.maven.lifecycle.internal.LifecycleDependencyResolver.getDependencies (LifecycleDependencyResolver.java:269)
The resolution of the library-a depdenency could neither be found in Maven Central (that’s correct) nor in the GitHub Package Registry.
한층 더 읽은 후에 나는 원인을 찾았다.pom.xml
현재 GitHub 작업 흐름의 저장소에는 권한이 있지만 다른 조직이나 사용자의 저장소에는 권한이 없습니다.a 도서관은 당시에 개인적이었지만 나는 머지않아 대중에게 개방할 것이다.
3.1 개인 액세스 토큰은 특정 저장소에 한정할 수 없습니다.PAT에서는 GitHub 작업 워크플로우를 통해 모든 개인 게시 패키지에 액세스할 수 있습니다.
3.2 귀하는 프로젝트와 라이브러리에 대한 권한을 가진 비허가 GitHub 사용자를 만들고 이 전용 사용자를 위한 개인 접근 카드를 만들 수 있습니다.
GITHUB_TOKEN
.주요 프로젝트의 비용
read:packages
은 다음과 같이 조정해야 합니다.on:
push:
branches: ["**"]
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Set up JDK 11.0.2
uses: actions/setup-java@v1
with:
java-version: 11.0
server-id: github # value of repository/id field of the pom.xml
server-username: GITHUB_USER_REF # env variable name for username
server-password: GITHUB_TOKEN_REF # env variable name for GitHub Personal Access Token
- name: Build with Maven
run: mvn -B -Pgithub package --file pom.xml
env:
GITHUB_USER_REF: ${{ secrets.GH_PACKAGE_REPO_USERNAME }}
GITHUB_TOKEN_REF: ${{ secrets.GH_PACKAGE_REPO_PASSWORD }}
기밀.github/worfklows/maven.yml
및 GH_PACKAGE_REPO_USERNAME
는 사용자 이름 및 이전에 생성된 개인 액세스 토큰입니다.저장소의 설정 > Confidential 페이지에 두 가지 Confidential을 추가해야 합니다.
총결산하다
이 블로그 글은 GitHub 패키지 등록표에 Maven 부품을 발표하고, 다른 Maven 또는Gradle 기반 프로젝트에서 이러한 의존항과 GitHub 조작을 사용할 수 있도록 GitHub 작업 흐름을 설정하는 방법을 보여 줍니다.
Reference
이 문제에 관하여(개인 GitHub 패키지 레지스트리에서 GitHub 워크플로우 및 Maven Dependencies 사용), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://dev.to/schakko/using-github-workflow-with-maven-dependencices-from-a-private-github-package-registry-2164
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
Reference
이 문제에 관하여(개인 GitHub 패키지 레지스트리에서 GitHub 워크플로우 및 Maven Dependencies 사용), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/schakko/using-github-workflow-with-maven-dependencices-from-a-private-github-package-registry-2164텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)