web-dev-qa-db-ja.com

GithubアクションからGithubパッケージレジストリにデプロイする

パブリックリポジトリの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

これはパブリックリポジトリであるため、ユーザー名/パスワードまたはトークンを提供したくありません。とにかく公開する方法はありますか?

ありがとう!

10
erdos

これを機能させるには、次の2つのことを行う必要があります。

  1. 以下を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>

ソース: https://help.github.com/en/articles/configuring-Apache-maven-for-use-with-github-package-registry#publishing-a-package

  1. ビルドアクション内からユーザー名/パスワードを使用してMaven設定ファイルをセットアップします。私の場合、私はこのようなことをしました:
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に渡すことはできないので、代わりに設定ファイルを設定する必要があります。ソース: コマンドラインでMavenデプロイのパスワードを渡すことは可能ですか?

最後に、これはSNAPSHOT以外のアーティファクトでのみ機能することを確認します。説明したように、SNAPSHOTバージョンをデプロイしようとすると、400エラーで失敗します。

5
lmsurprenant

私のプロジェクトにも同様の問題がありました。実行するたびにmvn deploy、それは失敗しました:

メタデータをgithubとの間で転送できませんでした( https://maven.pkg.github.com/.../ .. 。):400

しかし、気まぐれで、プロジェクトのバージョン番号を0.0.3-SNAPSHOTから0.0に変更しました。 4とその後、それは働いた。

多分それもあなたのために働くでしょう。

3
tawalaya

さて、によると:

私はあなたが単にこのようにすることができると思います:

  1. 以下をワークフローに追加してください
- name: Deploy to Github Package Registry
    env:
      GITHUB_USERNAME: x-access-token
      GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
    run:
      mvn --settings settings.xml deploy
  1. そして、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</activeProfile>
    </activeProfiles>

    <profiles>
        <profile>
            <id>github</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 OWNER Apache Maven Packages</name>
                    <url>https://maven.pkg.github.com/OWNER </url>
                </repository>
            </repositories>
        </profile>
    </profiles>

    <servers>
        <server>
            <id>github</id>
            <username>${env.GITHUB_USERNAME}</username>
            <password>${env.GITHUB_TOKEN}</password>
        </server>
    </servers>
</settings>

それは私にとってはうまくいきます、これが役に立てば幸いです。

2
Yur Ree

TL; DR:以下を.github/workflows/mavenpublish.ymlにコミットし、GitHub Webページ経由でリリースを作成してプロセスをトリガーします。

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}"

さらに詳しい情報:

私は以前に同じものを構築しました Jenkinsの場合 であり、settings.xmlを作成する必要も、リポジトリでpom.xmlを調整する必要もないことを伝えることができます。

GitHubトークンをsettings.xml(より安全)に書き込むことを回避することもできます。

また、リポジトリとユーザー名を手動で追加する必要はありません。これらは環境から読み取ることができます。

プッシュでビルドしたい場合は、on:の後ろの行を[Push]に変更するだけです。

これは 実際の例 です。

0
schnatterer