Развернуть в Github Package Registry из Github Action

Я хотел бы выполнить развертывание в реестре пакетов 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

Я не хочу указывать имя пользователя / пароль или токен, так как это публичный репозиторий. Есть ли способ опубликовать в любом случае?

Спасибо!

0 ответов

TL;DR: просто передайте следующее в .github/workflows/mavenpublish.yml и создайте выпуск через веб-страницу GitHub, чтобы запустить процесс:

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

Дополнительная информация:

Я делал то же самое раньше для Дженкинса и могу сказать вам, что вам не нужно создаватьsettings.xml ни адаптировать ваш pom.xml в вашем репо.

Вы даже можете избежать записи своего токена GitHub в settings.xml (что более безопасно).

Кроме того, вам не нужно вручную добавлять репо и имя пользователя, их можно прочитать из среды.

Если вы хотите, чтобы он строился на толчке, просто измените линии позади on: к [push].

Вот пример из жизни.

Чтобы он заработал, вам нужно сделать две вещи:

  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

  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 Deploy в командной строке?

Наконец, я подтверждаю, что это работает только для артефактов, не относящихся к SNAPSHOT. Когда я пытаюсь развернуть версию SNAPSHOT, она выдает ошибку 400, как описано.

В 2020 году есть более простой путь.

Сначала добавьте конфигурацию распространения в ваш 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>

В id должен быть гитхаб.

Во-вторых, используйте actions/setup-java@v1 в действии

steps:
  - uses: actions/checkout@v2

  - uses: actions/setup-java@v1
    with:
      java-version: 1.8

  - name: Publish to GitHub Packages
    env:
      GITHUB_TOKEN: ${{ github.token }}
    run: mvn deploy

У меня была аналогичная проблема для моего проекта. Каждый раз, когда я бегалmvn deploy, это не удалось:

Не удалось передать метаданные... из / в github (https://maven.pkg.github.com/): 400

Однако по прихоти я изменил номер версии своего проекта с 0.0.3-SNAPSHOT на 0.0.4, и после этого все заработало.

Может быть, это сработает и для вас.

Что ж, по словам:

Я думаю, вы могли бы просто сделать вот так:

  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>

У меня работает, надеюсь, поможет.

Другие вопросы по тегам