Рубрики
Uncategorized

Использование рабочего процесса GitHub с зависимости от Maven от личного реестра пакета GitHub

Репозиторий GitHub Package обеспечивает простой способ поделиться зависимостями, такими как артефакты Maven между GI … Помечено с GitHub, CiCD, Java.

Репозиторий GitHub Package обеспечивает простой способ поделиться такими зависимостями, как артефакты Maven между проектами GitHub. Публикация новых артефактов в репозиторий пакета GitHub может быть автоматизирован с действиями GitHub.

В мае 2019 года GitHub представил реестр пакета GitHub : альтернатива некоторым традиционным реестрам пакетов, таких как Сонатып Nexus Отказ За это время я не использовал для этого, потому что все наши внутренние зависимости хранятся в нашей частной компании Artifactory.

Быстро вперед до 2020 года: с началом года мы в частном порядке начали работу на Нинкик Отказ Действия GitHub и GitHub были использованы с самого начала для хранения хранилища и выполнения CI/CD. Мы включили некоторые зависимости Maven от наших Артефакты компании В Github Действия CI процесс.

В ноябре 2020 года мы достигли точки, что мы должны были повторно организовать структуру проекта NINKIK:

  1. Проект Maven должен был быть разбитым в мультимодуль Maven Project.
  2. В долгосрочной перспективе наша внутренняя библиотека (библиотека А) должна была перейти из Дженкинса и артефакторина до действий 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.

После некоторых дальнейших чтений я нашел причину, почему:

  1. Как я уже упоминал выше, Github_token имеет разрешения на хранилище Текущий Действия GitHub Workflow, но не для хранилищ других организаций или пользователей.
  2. Во время этого письма (2020 декабря) Реестр пакета GitHub делает не разрешать неаутентифицировать Доступ к государственным репозиториям. Библиотека-а был личным на данный момент Но я бы был открыт, чтобы сделать его публикой в ближайшее время.
  3. Это, как говорится, * личный токен доступа * 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»