在 Github 操作中 mvn deploy 给出 401 Unauthorized

Nic*_*ion 2 github-actions

我曾多次尝试将工件部署到https://maven.pkg.github.com.github/workflows但它们都导致 401 Unauthorized 错误。

      - name: Setup java for mvn deploy
        uses: actions/setup-java@v1
        with:
          java-version: 8

      - name: Deploy kaldi-linux.zip
        working-directory: kaldi
        env:
          GITHUB_TOKEN: ${{ github.token }}
        run: |
          cp ../.github/kaldi/* .
          perl -pi -e 's/^(\s{4}<version>).*(<\/version>)/${1}$ENV{"KALDI_VERSION"}${2}/g' pom.xml
          mvn deploy
Run Code Online (Sandbox Code Playgroud)
[ERROR] Failed to execute goal org.apache.maven.plugins:maven-deploy-plugin:2.7:deploy (default-deploy)
 on project kaldi: Failed to deploy artifacts: Could not transfer artifact org.kaldi:kaldi:pom:da93074
 from/to temp (https://maven.pkg.github.com/nalbion/vosk-api): Transfer failed for 
https://maven.pkg.github.com/nalbion/vosk-api/org/kaldi/kaldi/da93074/kaldi-da93074.pom 401 Unauthorized -> [Help 1]
Run Code Online (Sandbox Code Playgroud)

在这里记录:https : //github.com/nalbion/vosk-api/runs/683615393?check_suite_focus=true

我的理解是actions/setup-java应该提供settings.xml环境变量并且部署应该是直截了当的。有什么我没有做的事情需要做吗?

sma*_*c89 5

我可以通过第一手经验告诉你,将包部署到 github 的 maven repos 并不容易。忘记包部分中显示的“简单”步骤,该过程比这更复杂。但是,仍然可以这样做。

首先,您需要一个 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
                          https://maven.apache.org/xsd/settings-1.0.0.xsd">

  <servers>
    <server>
      <id>github</id>
      <configuration>
        <httpHeaders>
          <property>
            <name>Authorization</name>
            <value>Bearer <GITHUB_TOKEN_GOES HERE></value>
          </property>
        </httpHeaders>
      </configuration>
    </server>
  </servers>
</settings>
Run Code Online (Sandbox Code Playgroud)

我猜这个java动作会覆盖settings.xml,但上面是必需的。另一种选择是使用用户名/密码方法,但这种方法很快就过时了,像我上面所做的那样支持不记名令牌。

现在要使用源部署快照版本,这是我必须使用的命令:

mvn clean source:jar deploy -DuniqueVersion=false -Dmaven.source.useDefaultManifestFile=true -Dmaven.source.includePom=true -Dmaven.install.skip=true -DdeplyAtEnd=true -DaltDeploymentRepository='github::default::https://maven.pkg.github.com/OWNER/REPOSITORY'
Run Code Online (Sandbox Code Playgroud)

假设您pom.xml根据发布指南具有以下内容:

<distributionManagement>
   <repository>
     <id>github</id>
     <name>GitHub OWNER Apache Maven Packages</name>
     <url>https://maven.pkg.github.com/OWNER/REPOSITORY</url>
   </repository>
</distributionManagement>
Run Code Online (Sandbox Code Playgroud)

您可以将命令更改为:

mvn clean source:jar deploy -DuniqueVersion=false -Dmaven.source.useDefaultManifestFile=true -DdeplyAtEnd=true -Dmaven.source.includePom=true -Dmaven.install.skip=true
Run Code Online (Sandbox Code Playgroud)