Репозиторий GitHub Package обеспечивает простой способ поделиться такими зависимостями, как артефакты Maven между проектами GitHub. Публикация новых артефактов в репозиторий пакета GitHub может быть автоматизирован с действиями GitHub.
В мае 2019 года GitHub представил реестр пакета GitHub : альтернатива некоторым традиционным реестрам пакетов, таких как Сонатып Nexus Отказ За это время я не использовал для этого, потому что все наши внутренние зависимости хранятся в нашей частной компании Artifactory.
Быстро вперед до 2020 года: с началом года мы в частном порядке начали работу на Нинкик Отказ Действия GitHub и GitHub были использованы с самого начала для хранения хранилища и выполнения CI/CD. Мы включили некоторые зависимости Maven от наших Артефакты компании В Github Действия CI процесс.
В ноябре 2020 года мы достигли точки, что мы должны были повторно организовать структуру проекта NINKIK:
- Проект Maven должен был быть разбитым в мультимодуль Maven Project.
- В долгосрочной перспективе наша внутренняя библиотека (библиотека А) должна была перейти из Дженкинса и артефакторина до действий GitHub и реестра пакета GitHub.
Для нашего Библиотека А. У нас уже был простой скрипт, который подготовил новый для артефактория. Я явно не хотел переключать эти процессы на цели Maven Выпуск: подготовить и Выпуск: Выполните Отказ
Вместо этого я просто хотел опубликовать новый артефакт в реестр пакета GitHub на каждом сборке, используя наш скрипт и Развертывание: Развертывание Цель.
Регулировка Pom.xml для управления распределением
Используя Развертывание: Развертывание Цель требует, чтобы вы настроили новый репозиторий в Распространение Тег Pom.xml Отказ В моем случае я решил включить дополнительный репозиторий, используя профиль Maven:
4.0.0 com.dreitier library-a-parent 0.0.1-SNAPSHOT pom github github GitHub Packages https://maven.pkg.github.com/dreitier/library-a
С Maven -П Параметр командной строки Теперь вы можете использовать профиль Maven гадость . Чтобы проверить конфигурацию локально, вы должны создать Личный доступ Токен Для вашего аккаунта GitHub.
Чтобы загрузить артефакты в реестр пакета GitHub, ваш личный токен доступа должен иметь масштаб Написать: пакеты :
Вы должны добавить токен личного доступа к вашей Maven settings.xml :
github your-username your-personal-access-token
На местном уровне вы можете опубликовать новый артефакт Maven в реестр пакета GitHub с
mvn -Pgithub deploy
Github Действия Рабочий процесс
Чтобы сделать публикацию этого артефакта, работающего в GitHub Действия, рабочий процесс прост. Вам просто нужно добавить несколько строк в вашем .Гитеб/рабочие процессы/Maven.yml :
on:
push:
branches: ["**"]
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Set up JDK 11.0.2
uses: actions/setup-java@v1
with:
java-version: 11.0
- name: Deploy
run: mvn -B -Pgithub deploy
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
Действия/Setup-Java автоматически устанавливает настройки Maven.xml с надлежащей конфигурацией для развертывания. Это ссылается на $ {env.github_token} Переменная. Github_token. является частным токеном, который автоматически доступен и имеет назначение разрешений для хранилища текущего рабочего процесса действий GitHub.
Предупреждение Вы должны убедиться, что вы убираете старые пакеты в вашем реестре. В зависимости от вашей скорости совершенствования и размера пакета ваш репозиторий достигнет квоты реестра пакетов.
На данный момент нет никаких пользовательских действий, которые отбрасывают все опубликованные пакет Но Последние n Версии. Действия/Удалить-пакет-версии В настоящее время поддерживает только для отказа от последнего n Версии.
С помощью следующих действий GitHub Build ваши артефакты будут опубликованы и появляться в приборной панели репозитория:
В Нинкик Мне пришлось заменить старый реестр Maven Artifactory Maven с реестром пакета GitHub. С предыдущих шагов у вас есть локально Maven Github Профиль уже доступен. В моем случае я добавил дополнительный реестр GitHub Package Registry для Ninkik’s Pom.xml :
4.0.0 com.dreitier ninkik-parent pom github central https://repo1.maven.org/maven2 true true github GH dreitier https://maven.pkg.github.com/dreitier/library-a true true
С этими настройками будет работать нормальный пакет MVN на вашем локальном компьютере. Все необходимые нагрузки либо загружаются из Maven Central или из реестра пакета GitHub.
Используя реестры реестра GitHub в Github Actions Workflows, я ожидал, что рабочим процессом действий GitHub можно также использовать без каких-либо модификаций для NINKIK. Но вместо этого я получил следующую ошибку в Действия GitHub:
[INFO] Downloading from github: https://maven.pkg.github.com/dreitier/library-a/library-a.jar
[DEBUG] Writing tracking file /home/runner/.m2/repository/com/dreitier/library-a/library-a.jar.lastUpdated
[INFO] ------------------------------------------------------------------------
[INFO] Reactor Summary for ninkik-parent 0.0.1-SNAPSHOT:
[INFO]
[INFO] ninkik-parent ...................................... SUCCESS [ 0.007 s]
[INFO] ninkik api spec .................................... FAILURE [ 4.620 s]
[INFO] ...
[INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 23.400 s
[INFO] Finished at: 2020-12-16T21:34:31Z
[INFO] ------------------------------------------------------------------------
Error: Failed to execute goal on project ninkik-api-spec: Could not resolve dependencies for project com.dreitier:ninkik-api-spec:jar:0.0.1-SNAPSHOT: Could not find artifact com.dreitier.library-a-data-commons:jar:0.0.38-SNAPSHOT in central (https://repo1.maven.org/maven2) -> [Help 1]
org.apache.maven.lifecycle.LifecycleExecutionException: Failed to execute goal on project ninkik-api-spec: Could not resolve dependencies for project com.dreitier:ninkik-api-spec:jar:0.0.1-SNAPSHOT: Could not find artifact com.dreitier.library-a-data-commons:jar:0.0.38-SNAPSHOT in central (https://repo1.maven.org/maven2)
at org.apache.maven.lifecycle.internal.LifecycleDependencyResolver.getDependencies (LifecycleDependencyResolver.java:269)
The resolution of the library-a depdenency could neither be found in Maven Central (that's correct) nor in the GitHub Package Registry.
После некоторых дальнейших чтений я нашел причину, почему:
- Как я уже упоминал выше,
Github_tokenимеет разрешения на хранилище Текущий Действия GitHub Workflow, но не для хранилищ других организаций или пользователей. - Во время этого письма (2020 декабря) Реестр пакета GitHub делает не разрешать неаутентифицировать Доступ к государственным репозиториям. Библиотека-а был личным на данный момент Но я бы был открыт, чтобы сделать его публикой в ближайшее время.
- Это, как говорится, * личный токен доступа * S должен использоваться: 3.1 личные токены доступа не могут быть определены на определенных репозиториях. Ваш пат даст доступ к работе Github Actions для всех ваших частных опубликованных пакетов. 3.2 Вы можете создать поддельный пользователь GitHub с разрешениями для вашего проекта и в зависимости от библиотеки, а затем создать токен личного доступа для этого выделенного пользователя.
Для целей тестирования вы можете пойти с 3.1 и создать дополнительные Личный доступ Токен В вашем аккаунте GitHub ниже Настройки> Настройки разработчика> Товары для частных доступа . Личный токен доступа Должен иметь область охвата Читать: Пакеты Отказ
..Github/worfklows/maven.yml основного проекта должен быть скорректирован до следующего:
on:
push:
branches: ["**"]
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Set up JDK 11.0.2
uses: actions/setup-java@v1
with:
java-version: 11.0
server-id: github # value of repository/id field of the pom.xml
server-username: GITHUB_USER_REF # env variable name for username
server-password: GITHUB_TOKEN_REF # env variable name for GitHub Personal Access Token
- name: Build with Maven
run: mvn -B -Pgithub package --file pom.xml
env:
GITHUB_USER_REF: ${{ secrets.GH_PACKAGE_REPO_USERNAME }}
GITHUB_TOKEN_REF: ${{ secrets.GH_PACKAGE_REPO_PASSWORD }}
Секреты Gh_package_repo_username и Gh_package_repo_password Ваше имя пользователя пользователя и ранее сгенерированные Личный доступ Токен Отказ
Вы должны добавить оба секрета в вашем репозитории Настройки> Секреты страница:
В этом сообщении в блоге я показал вам, как настроить рабочий процесс GitHub Actions, чтобы опубликовать артефакты Maven в реестре пакета GitHub и использовать эти зависимости в других проектах на основе Maven или Ridle, также с действиями GitHub.
Оригинал: «https://dev.to/schakko/using-github-workflow-with-maven-dependencices-from-a-private-github-package-registry-2164»