尝试使用github操作将代码部署到github软件包时出现错误代码400

时间:2019-12-02 22:37:23

标签: java maven github repository pipeline

我正在为使用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]

(信息:我在[括号]中用通用术语代替了不必要的和/或私人的具体信息)

最有可能的是,实际的maven-metadata.xml文件不是问题所在,因为以前我已经看到状态为400的警告,例如“无法上传校验和”。我猜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存储库完全属于我也是很重要的,因此我应该对此拥有所有管理员权限。

我尝试过的事情:

到目前为止,我已经进行了一些研究,发现我的问题似乎并不罕见。尽管到目前为止,从我发现的所有解决方案中,没有一个起作用。

  1. Official GitHub documentation for setting up workflows

首先,我以本网站作为参考。

  1. This StackOverflow Question

我主要坚持在这个问题和答案中找到的所有建议。

  1. This other StackOverflow Question about nexus deploys

此问题的accepted answer提供了一个清单。尽管我无法验证所有内容,但我还是尝试检查所有要点是否对我有用。根据此清单,我没有发现任何问题。

  1. This question on the GitHub community forum

此问题中显示的错误看起来很像我所收到的错误,但建议的解决方案仍然无法解决我的任何问题。

  1. This Answer on a similar GitHub community forum question

此答案建议使用个人访问令牌代替GITHUB_TOKEN。我试过了,它什么也没变。

我需要什么

如果有人可以向我展示我案件的确切问题,我当然会很高兴,但是并不需要那么具体。我正在尝试建立最基本的管道,而我目前不希望做更多的事情,而不仅仅是将Maven快照存储库部署到github包(使用github动作)。因此,如果有人可以向我展示如何正确地一般,那也很好。谢谢!

1 个答案:

答案 0 :(得分:0)

我自己弄清楚了,但是结果非常不令人满意。这里的主要问题是:

  

注意:GitHub软件包不支持Apache Maven的SNAPSHOT版本。确保在〜/ .m2 / settings.xml文件中禁用SNAPHOT。

Source

因此,似乎GitHub Packages不支持构建maven快照存储库,否则该存储库非常实用。我的计划是建立一个工作流,以在开发发生时在软件包注册表上部署新的SNAPSHOT。 Maven快照存储库不需要唯一的版本号即可部署,这意味着我可以为每次推送构建一个新版本,但是实际的依赖版本保持不变。这样,每个人都可以轻松地尝试我的develop分支的最新状态,只需在其pom文件中包含固定的快照版本即可。

现在,如何解决我的问题:

由于GitHub软件包不支持快照存储库,因此您必须从pom文件中SNAPSHOT标记中的值中删除关键字“ project.version”。基本上,您可以在其中放置所有其他版本说明,但是现在它是唯一的。但是,如果您删除所有SNAPSHOT关键字,则工作流应将程序包正确部署到GitHub程序包注册表,至少对我有用。

如果有人知道解决此SNAPSHOT问题的方法,请告诉我。否则,这是我到目前为止找到的唯一可行的解​​决方案。