如何解决如何在Github Actions工作流上从Github包访问Maven依赖关系?
我的构建通过在pom.xml
<repository>
元素上直接使用User + PAT(个人访问令牌)在本地工作:
<repository>
<id>github</id>
<name>GitHub Packages</name>
<url>https://[USER]:[PAT]@maven.pkg.github.com/myaccount/myrepo</url>
</repository>
从github下载: https:// [USER]:[PAT] @ maven.pkg.github.com / myaccount / myrepo / org / springframework / flex / spring-flex-core / 1.6.1.BUILD-SNAPSHOT / maven-metadata.xml (796 B,592 B / s)
我没有配置settings.xml
。
但是,它在Github Actions工作流程上中断了:
警告:无法传输元数据 org.springframework.flex:spring-flex-core:1.6.1.BUILD-SNAPSHOT / maven-metadata.xml 从/到github(*** maven.pkg.github.com/myaccount/myrepo): 身份验证失败 https://maven.pkg.github.com/myaccount/myrepo/org/springframework/flex/spring-flex-core/1.6.1.BUILD-SNAPSHOT/maven-metadata.xml 401未经授权
无法在org.springframework.flex:spring-flex-core:jar:1.6.1.BUILD-SNAPSHOT上收集依赖项:无法读取org.springframework.flex:spring-flex-core:jar的工件描述符: 1.6.1.BUILD-SNAPSHOT
我的工作流程是这样的:
steps:
- uses: actions/checkout@v2
- name: Set up JDK 1.8
uses: actions/setup-java@v1
with:
java-version: 1.8
- name: Cache Maven packages
uses: actions/cache@v2
with:
path: ~/.m2
key: ${{ runner.os }}-m2-${{ hashFiles('**/pom.xml') }}
restore-keys: ${{ runner.os }}-m2
- name: Build with Maven
run: mvn -B package --file dev/server/pom.xml
为什么它在Github工作流程上中断?
解决方法
根据你的问题,我想:
- 您在
GitHub Package
部署了 Maven 项目,我们称之为library
- 您有另一个 maven 项目,它使用
library
包作为其 pom.xml 中的依赖项,我们称该项目为您的app
- 您想使用
GitHub Actions
存储库中的app
添加自动化构建工作流程
如果您的 library
甚至是公共包,不幸的是,目前 GitHub 不支持从 maven
未经授权访问公共包。因此,您应该这样做:
-
转到
app
存储库的设置部分,并在Secrets
的小节中创建两个名为USER_NAME
的环境机密,其值包含您的 GitHub 用户名(或library
包的所有者);和ACCESS_TOKEN
指向在上一步中创建的 PAT 令牌的值。 -
现在,在
app
存储库中创建一个 maven settings.xml,例如,您可以在workflow.yml
文件旁边创建它。该文件包含:
<?xml version="1.0" encoding="UTF-8"?>
<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">
<activeProfiles>
<activeProfile>github</activeProfile>
</activeProfiles>
<profiles>
<profile>
<id>github</id>
<repositories>
<repository>
<id>central</id>
<url>https://repo1.maven.org/maven2</url>
</repository>
<repository>
<id>github</id>
<url>https://maven.pkg.github.com/owner_username/package_name</url>
<snapshots>
<enabled>true</enabled>
</snapshots>
<releases>
<enabled>true</enabled>
</releases>
</repository>
</repositories>
</profile>
</profiles>
<servers>
<server>
<id>github</id>
<username>${env.USER_NAME}</username>
<password>${env.ACCESS_TOKEN}</password>
</server>
</servers>
</settings>
- 并且,最后在工作流中使用这些设置文件,当运行 maven 命令时。例如,
workflow.yaml
文件可以包含:
name: Java CI with Maven
on:
push:
branches: [ main ]
pull_request:
branches: [ main ]
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Set up JDK 8
uses: actions/setup-java@v2
with:
java-version: '8'
distribution: 'adopt'
- name: Build with Maven
run: mvn -s $GITHUB_WORKSPACE/.github/workflows/maven-settings.xml -B package --file pom.xml
env:
USER_NAME: ${{ secrets.USER_NAME }}
ACCESS_TOKEN: ${{ secrets.ACCESS_TOKEN }}
,
您需要使用 GITHUB_TOKEN 进行操作。 请参阅此处:https://docs.github.com/en/packages/guides/configuring-apache-maven-for-use-with-github-packages#authenticating-to-github-packages
要使用 GitHub Actions 工作流程进行身份验证:对于包注册表 (PACKAGE-REGISTRY.pkg.github.com),您可以使用 GITHUB_TOKEN。
name: Java CI with Maven
on:
push:
branches: [ maven ]
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Set up JDK 1.8
uses: actions/setup-java@v1
with:
java-version: 1.8
- name: Build core with Maven
...
- name: Publish package core
run: mvn --batch-mode deploy --file myproject.core/pom.xml
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。