尝试使用 github 操作(maven)部署到 github 包时出现错误代码 400
Error Code 400 when trying to (maven) deploy to github packages using github actions
我正在努力完成使用 github 操作工作流将 Maven 项目部署到 github 包的(看似)简单的任务。首先,这是我在 maven deploy
阶段遇到的错误:
[ERROR] Failed to execute goal org.apache.maven.plugins:maven-deploy-plugin:2.7:deploy (default-deploy) on project [project name]: Failed to retrieve remote metadata [groupId]:[artifactId]:1.0-SNAPSHOT/maven-metadata.xml: Could not transfer metadata [groupId]:[artifactId]:1.0-SNAPSHOT/maven-metadata.xml from/to github (https://maven.pkg.github.com/[username]/[repository]): Failed to transfer file https://maven.pkg.github.com/[username]/[repository]/[groupId as path]/[artifactId]/1.0-SNAPSHOT/maven-metadata.xml with status code 400 -> [Help 1]
(信息:我用 [括号] 中的通用术语替换了不必要的 and/or 私人具体信息)
最有可能的是,实际的 maven-metadata.xml 文件不是问题,因为我之前已经看到状态为 400 的 "could not upload checksum" 之类的警告。我猜 maven-metadata.xml 只是它失败的第一个文件,但可能我对这个假设完全错误,如果是这样请告诉我。
可能最重要的文件是工作流 yaml 文件:
name: Deploy SNAPSHOT (develop)
on:
push:
branches:
- develop
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v1
- name: Set up JDK 11
uses: actions/setup-java@v1
with:
java-version: 11
- name: Maven Deploy
env:
GITHUB_USERNAME: x-access-token
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: mvn --settings settings.xml -B -e -Dmaven.wagon.http.pool=false clean deploy
也很重要:maven settings.xml 文件:
<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-packages</activeProfile>
</activeProfiles>
<profiles>
<profile>
<id>github-packages</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>GitHub [username] Apache Maven Packages</name>
<url>https://maven.pkg.github.com/[username]</url>
</repository>
</repositories>
</profile>
</profiles>
<servers>
<server>
<id>github</id>
<username>${env.GITHUB_USERNAME}</username>
<password>${env.GITHUB_TOKEN}</password>
</server>
</servers>
</settings>
(信息:括号中的值与之前相同)
最后,我的 Maven 项目的父 pom.xml:
<?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>[groupId]</groupId>
<artifactId>[artifactId]</artifactId>
<packaging>pom</packaging>
<version>1.0-SNAPSHOT</version>
<modules>
[child modules]
</modules>
<properties>
<maven.compiler.source>11</maven.compiler.source>
<maven.compiler.target>11</maven.compiler.target>
<maven.compiler.release>11</maven.compiler.release>
</properties>
<dependencies>
[my dependencies]
</dependencies>
<distributionManagement>
<repository>
<id>github</id>
<name>GitHub [username] Apache Maven Packages</name>
<url>https://maven.pkg.github.com/[username]/[repository]</url>
</repository>
</distributionManagement>
</project>
也许说 GitHub 存储库完全属于我,因此我应该拥有它的所有管理权限。
我尝试过的事情:
我现在做了一些研究,发现我的问题似乎并不少见。虽然,到目前为止,我发现的所有解决方案都没有奏效。
首先,我使用这个网站作为参考。
- This Whosebug Question
我基本上坚持我在这个问题及其答案中找到的所有建议。
- This other Whosebug Question about nexus deploys
这个问题的accepted answer提供了一个检查表。我试图检查所有要点是否适合我,尽管我无法验证所有内容。我没有发现基于此清单的任何问题。
这个问题中显示的错误看起来非常像我遇到的错误,建议的解决方案仍然没有为我解决任何问题。
此答案建议使用个人访问令牌而不是 GITHUB_TOKEN
。我试过了,但没有任何改变。
我需要什么
当然,如果有人能告诉我我的案例的确切问题是什么,我当然会很高兴,但它不需要那么具体。我正在尝试设置最基本的管道,目前我不想做的不仅仅是将 Maven 快照存储库部署到 github 包(使用 github 操作)。所以,如果有人能告诉我如何正确地一般来说,那也很好。谢谢!
我自己也算算出来了,但是结果很不满意。这里的主要问题是:
Note: GitHub Packages does not support SNAPSHOT versions of Apache Maven. Make sure you disable SNAPHOT in your ~/.m2/settings.xml file.
(Source)
所以,好像GitHubPackages不支持构建maven快照库,否则很实用。我的计划是建立一个工作流,在推送开发时在包注册表上部署一个新的 SNAPSHOT。 Maven 快照存储库不需要用于部署的唯一版本号,这意味着我可以为每次推送构建一个新版本,但实际的依赖版本保持不变。然后每个人都可以轻松地试用我的 develop
分支的最新状态,只需在他们的 pom 文件中包含固定的快照版本。
现在,如何解决我的问题:
因为 GitHub 包不支持快照存储库,您必须从 pom 文件的 project.version
标记的值中删除关键字“SNAPSHOT
”。基本上你可以把所有其他版本的描述放在那里,但现在它是独一无二的。但是,如果您删除所有 SNAPSHOT
关键字,工作流应该正确地将包部署到 GitHub 包注册表,至少它对我有用。
如果有人知道 "hack" 解决这个 SNAPSHOT
问题的方法,请告诉我。否则这是我迄今为止找到的唯一可行的解决方案。
我正在努力完成使用 github 操作工作流将 Maven 项目部署到 github 包的(看似)简单的任务。首先,这是我在 maven deploy
阶段遇到的错误:
[ERROR] Failed to execute goal org.apache.maven.plugins:maven-deploy-plugin:2.7:deploy (default-deploy) on project [project name]: Failed to retrieve remote metadata [groupId]:[artifactId]:1.0-SNAPSHOT/maven-metadata.xml: Could not transfer metadata [groupId]:[artifactId]:1.0-SNAPSHOT/maven-metadata.xml from/to github (https://maven.pkg.github.com/[username]/[repository]): Failed to transfer file https://maven.pkg.github.com/[username]/[repository]/[groupId as path]/[artifactId]/1.0-SNAPSHOT/maven-metadata.xml with status code 400 -> [Help 1]
(信息:我用 [括号] 中的通用术语替换了不必要的 and/or 私人具体信息)
最有可能的是,实际的 maven-metadata.xml 文件不是问题,因为我之前已经看到状态为 400 的 "could not upload checksum" 之类的警告。我猜 maven-metadata.xml 只是它失败的第一个文件,但可能我对这个假设完全错误,如果是这样请告诉我。
可能最重要的文件是工作流 yaml 文件:
name: Deploy SNAPSHOT (develop)
on:
push:
branches:
- develop
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v1
- name: Set up JDK 11
uses: actions/setup-java@v1
with:
java-version: 11
- name: Maven Deploy
env:
GITHUB_USERNAME: x-access-token
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: mvn --settings settings.xml -B -e -Dmaven.wagon.http.pool=false clean deploy
也很重要:maven settings.xml 文件:
<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-packages</activeProfile>
</activeProfiles>
<profiles>
<profile>
<id>github-packages</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>GitHub [username] Apache Maven Packages</name>
<url>https://maven.pkg.github.com/[username]</url>
</repository>
</repositories>
</profile>
</profiles>
<servers>
<server>
<id>github</id>
<username>${env.GITHUB_USERNAME}</username>
<password>${env.GITHUB_TOKEN}</password>
</server>
</servers>
</settings>
(信息:括号中的值与之前相同)
最后,我的 Maven 项目的父 pom.xml:
<?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>[groupId]</groupId>
<artifactId>[artifactId]</artifactId>
<packaging>pom</packaging>
<version>1.0-SNAPSHOT</version>
<modules>
[child modules]
</modules>
<properties>
<maven.compiler.source>11</maven.compiler.source>
<maven.compiler.target>11</maven.compiler.target>
<maven.compiler.release>11</maven.compiler.release>
</properties>
<dependencies>
[my dependencies]
</dependencies>
<distributionManagement>
<repository>
<id>github</id>
<name>GitHub [username] Apache Maven Packages</name>
<url>https://maven.pkg.github.com/[username]/[repository]</url>
</repository>
</distributionManagement>
</project>
也许说 GitHub 存储库完全属于我,因此我应该拥有它的所有管理权限。
我尝试过的事情:
我现在做了一些研究,发现我的问题似乎并不少见。虽然,到目前为止,我发现的所有解决方案都没有奏效。
首先,我使用这个网站作为参考。
- This Whosebug Question
我基本上坚持我在这个问题及其答案中找到的所有建议。
- This other Whosebug Question about nexus deploys
这个问题的accepted answer提供了一个检查表。我试图检查所有要点是否适合我,尽管我无法验证所有内容。我没有发现基于此清单的任何问题。
这个问题中显示的错误看起来非常像我遇到的错误,建议的解决方案仍然没有为我解决任何问题。
此答案建议使用个人访问令牌而不是 GITHUB_TOKEN
。我试过了,但没有任何改变。
我需要什么
当然,如果有人能告诉我我的案例的确切问题是什么,我当然会很高兴,但它不需要那么具体。我正在尝试设置最基本的管道,目前我不想做的不仅仅是将 Maven 快照存储库部署到 github 包(使用 github 操作)。所以,如果有人能告诉我如何正确地一般来说,那也很好。谢谢!
我自己也算算出来了,但是结果很不满意。这里的主要问题是:
Note: GitHub Packages does not support SNAPSHOT versions of Apache Maven. Make sure you disable SNAPHOT in your ~/.m2/settings.xml file.
(Source)
所以,好像GitHubPackages不支持构建maven快照库,否则很实用。我的计划是建立一个工作流,在推送开发时在包注册表上部署一个新的 SNAPSHOT。 Maven 快照存储库不需要用于部署的唯一版本号,这意味着我可以为每次推送构建一个新版本,但实际的依赖版本保持不变。然后每个人都可以轻松地试用我的 develop
分支的最新状态,只需在他们的 pom 文件中包含固定的快照版本。
现在,如何解决我的问题:
因为 GitHub 包不支持快照存储库,您必须从 pom 文件的 project.version
标记的值中删除关键字“SNAPSHOT
”。基本上你可以把所有其他版本的描述放在那里,但现在它是独一无二的。但是,如果您删除所有 SNAPSHOT
关键字,工作流应该正确地将包部署到 GitHub 包注册表,至少它对我有用。
如果有人知道 "hack" 解决这个 SNAPSHOT
问题的方法,请告诉我。否则这是我迄今为止找到的唯一可行的解决方案。