Развернуть в 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]
.
Вот пример из жизни.
Чтобы он заработал, вам нужно сделать две вещи:
- Добавьте в свой 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
- Настройте файл настроек 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, и после этого все заработало.
Может быть, это сработает и для вас.
Что ж, по словам:
- Командная строка maven, как указать на конкретный файл settings.xml для одной команды?
- Реестр пакетов GitHub как репозиторий Maven - проблема с загрузкой артефакта
Я думаю, вы могли бы просто сделать вот так:
- Добавьте ниже в свой рабочий процесс
- name: Deploy to Github Package Registry
env:
GITHUB_USERNAME: x-access-token
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run:
mvn --settings settings.xml deploy
- А затем добавьте в свой проект 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>
У меня работает, надеюсь, поможет.