我想从一个公共仓库的GitHub操作部署到一个GitHub包注册表。
我有一个用于工作流的yml文件:
name: My CI
on: [push]
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v1
- name: Install dependencies
run: lein deps
- name: Run tests
run: lein test
- name: Generate pom
run: lein pom
- name: Deploy
run: mvn deploy我使用Leiningen构建项目并生成POM文件。然后,我想使用Maven将工件部署到GitHub包注册表。
执行Deploy命令失败(我已经用...替换了个人信息):
[WARNING] Could not transfer metadata ... from/to github (https://maven.pkg.github.com/.../...): Not authorized
[INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 19.343 s
[INFO] Finished at: 2019-08-29T13:08:42Z
[INFO] ------------------------------------------------------------------------
[ERROR] Failed to execute goal org.apache.maven.plugins:maven-deploy-plugin:2.7:deploy (default-deploy) on project ...: Failed to retrieve remote metadata .../maven-metadata.xml: Could not transfer metadata ... from/to github (https://maven.pkg.github.com/.../...): Not authorized -> [Help 1]
[ERROR]
[ERROR] To see the full stack trace of the errors, re-run Maven with the -e switch.
[ERROR] Re-run Maven using the -X switch to enable full debug logging.
[ERROR]
[ERROR] For more information about the errors and possible solutions, please read the following articles:
[ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/MojoExecutionException
##[error]Process completed with exit code 1.我发现身份验证失败了。我也尝试了这一步,也得到了同样的结果:
run: mvn deploy -Dserver.username=... -Dserver.password=${{ secrets.GITHUB_TOKEN }} -DskipTests我不想提供用户名/密码或令牌,因为这是一个公共存储库。有没有一种发布的方法?
谢谢!
发布于 2019-09-20 12:18:53
要使其正常工作,您需要做两件事:
<distributionManagement>
<repository>
<id>github</id>
<name>GitHub OWNER Apache Maven Packages</name>
<url>https://maven.pkg.github.com/OWNER/REPOSITORY</url>
</repository>
</distributionManagement>name: Java CI
on: [push]
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v1
- name: Set up JDK 1.8
uses: actions/setup-java@v1
with:
java-version: 1.8
- name: Deploy to Github Package Registry
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: |
mkdir ~/.m2
echo "<settings><servers><server><id>github</id><username>OWNER</username><password>${GITHUB_TOKEN}</password></server></servers></settings>" > ~/.m2/settings.xml
mvn deploy不幸的是,我不认为您可以将用户名/密码作为参数传递给Maven,因此您需要设置设置文件。来源:Is it possible to pass a password in Maven Deploy in the command line?
最后,我确认这只适用于非快照工件。当我尝试部署快照版本时,它失败了,并出现了一个400错误,如上所述。
发布于 2020-03-14 20:25:14
TL;DR:只需向.github/workflows/mavenpublish.yml提交以下内容,并通过GitHub网页创建一个版本即可触发该流程:
name: Maven Package
on:
release:
types: [created]
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: Deploy to Github Package Registry
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: |
mkdir -p ~/.m2
echo "<settings><servers><server><id>gh</id><username>$(echo "$GITHUB_REPOSITORY" | awk -F / '{print $1}')</username><password>\${env.GITHUB_TOKEN}</password></server></servers></settings>" > ~/.m2/settings.xml
REPO="gh::default::https://maven.pkg.github.com/${GITHUB_REPOSITORY}"
mvn deploy -DaltReleaseDeploymentRepository="${REPO}" -DaltSnapshotDeploymentRepository="${REPO}"更多信息:
我已经在for Jenkins之前构建了同样的东西,我可以告诉你,你不需要创建一个settings.xml,也不需要在你的存储库中调整你的pom.xml。
您甚至可以避免将GitHub令牌写入settings.xml (这更安全)。
此外,您不需要手动添加存储库和用户名,这些都可以从环境中读取。
如果你想在推送的基础上构建它,只需将on:后面的代码行改为[push]即可。
这是一个real-life example。
发布于 2019-09-18 19:47:56
我在我的项目中遇到了类似的问题。每次我运行mvn deploy时,它都会失败,并显示以下信息:
无法传输元数据...从/到github (https://maven.pkg.github.com/.../..。):400
然而,一时兴起,我将项目的版本号从0.0.3-SNAPSHOT更改为0.0.4,之后,它就可以工作了。
也许它也会为你工作。
https://stackoverflow.com/questions/57711558
复制相似问题