パブリックリポジトリの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
これはパブリックリポジトリであるため、ユーザー名/パスワードまたはトークンを提供したくありません。とにかく公開する方法はありますか?
ありがとう!
これを機能させるには、次の2つのことを行う必要があります。
<distributionManagement>
<repository>
<id>github</id>
<name>GitHub OWNER Apache Maven Packages</name>
<url>https://maven.pkg.github.com/OWNER/REPOSITORY</url>
</repository>
</distributionManagement>
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エラーで失敗します。
私のプロジェクトにも同様の問題がありました。実行するたびにmvn deploy
、それは失敗しました:
メタデータをgithubとの間で転送できませんでした( https://maven.pkg.github.com/.../ .. 。):400
しかし、気まぐれで、プロジェクトのバージョン番号を0.0.3-SNAPSHOTから0.0に変更しました。 4とその後、それは働いた。
多分それもあなたのために働くでしょう。
さて、によると:
私はあなたが単にこのようにすることができると思います:
- name: Deploy to Github Package Registry
env:
GITHUB_USERNAME: x-access-token
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run:
mvn --settings settings.xml deploy
<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>
それは私にとってはうまくいきます、これが役に立てば幸いです。
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]
に変更するだけです。
これは 実際の例 です。