首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从Github Action部署到Github包注册表

从Github Action部署到Github包注册表
EN

Stack Overflow用户
提问于 2019-08-29 21:43:15
回答 5查看 6.8K关注 0票数 15

我想从一个公共仓库的GitHub操作部署到一个GitHub包注册表。

我有一个用于工作流的yml文件:

代码语言:javascript
复制
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命令失败(我已经用...替换了个人信息):

代码语言:javascript
复制
[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.

我发现身份验证失败了。我也尝试了这一步,也得到了同样的结果:

代码语言:javascript
复制
run: mvn deploy -Dserver.username=... -Dserver.password=${{ secrets.GITHUB_TOKEN }} -DskipTests

我不想提供用户名/密码或令牌,因为这是一个公共存储库。有没有一种发布的方法?

谢谢!

EN

回答 5

Stack Overflow用户

发布于 2019-09-20 12:18:53

要使其正常工作,您需要做两件事:

  1. 将以下内容添加到您的pom.xml:

代码语言:javascript
复制
<distributionManagement>
   <repository>
     <id>github</id>
     <name>GitHub OWNER Apache Maven Packages</name>
     <url>https://maven.pkg.github.com/OWNER/REPOSITORY</url>
   </repository>
</distributionManagement>

来源:https://help.github.com/en/articles/configuring-apache-maven-for-use-with-github-package-registry#publishing-a-package

  1. 在构建操作中使用用户名/密码设置Maven设置文件。在我的例子中,我做了这样的事情:

代码语言:javascript
复制
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错误,如上所述。

票数 10
EN

Stack Overflow用户

发布于 2020-03-14 20:25:14

TL;DR:只需向.github/workflows/mavenpublish.yml提交以下内容,并通过GitHub网页创建一个版本即可触发该流程:

代码语言:javascript
复制
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

票数 10
EN

Stack Overflow用户

发布于 2019-09-18 19:47:56

我在我的项目中遇到了类似的问题。每次我运行mvn deploy时,它都会失败,并显示以下信息:

无法传输元数据...从/到github (https://maven.pkg.github.com/.../..。):400

然而,一时兴起,我将项目的版本号从0.0.3-SNAPSHOT更改为0.0.4,之后,它就可以工作了。

也许它也会为你工作。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57711558

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档