Рубрики
Без рубрики

Действия на GitHub, Maven и Artifactory

Недавно я начал новое доказательство концепции, которое началось с одного репозитория в GitHub и было построено с использованием G… С тегами githubactions, maven, artifactory, java.

Недавно я запустил новое доказательство концепции, которое началось с одного репозитория в GitHub и было построено с использованием действий GitHub.

Затем я экстернализировал некоторые базовые классы для совместного использования в нескольких репозиториях и, конечно же, прервал сборку, потому что общие классы больше не были доступны сразу.

Это положило начало моему путешествию по созданию искусственного экземпляра и выполнению надлежащих выпусков на моем доказательстве концепции, и я хотел поделиться тем, как настроить с:

  • Знаток
  • Искусственный
  • Действия на GitHub

Конечно, вам потребуется создать пару репозиториев GitHub и создать экземпляр Artifactory. Бесплатная версия Artifactory идеально подходит для этого сценария. Помните, что для настройки другого инструмента управления зависимостями могут потребоваться другие шаги.

Сначала давайте посмотрим, как выглядит наша системная аутентификация:

Чтобы управлять артефактами (кодом, банками, спецификацией), нам нужно будет иметь возможность использовать наш экземпляр Artifactory в качестве одного из наших хранилищ Maven. Это требует обеспечения возможности аутентификации для чтения из нашего хранилища.

Нам также нужно будет убедиться, что у нас есть разрешения для отправки в экземпляр Artifactory.

Наконец, чтобы пометить и запустить выпуск в GitHub, нам нужно будет настроить Maven с правильными учетными данными безопасности, чтобы сделать это от вашего имени.

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

На самом деле он не используется, а скорее заполнитель, так как мы будем использовать заголовок авторизации с токеном “поток-github-действия” ARTIFACTORY_ПОЛЬЗОВАТЕЛЬСКИЙ_РЕФ
Токен-носитель, имеющий разрешения на чтение и запись в выбранные хранилища артефактов. “поток-github-действия” АРТИФАКТОРЫ_ТОКЕН_РЕФ
Этот токен используется плагином Artifactory maven и использует тот же токен, который используется для чтения из Artifactory. “поток-github-действия” ARTIFACTORY_ТОКЕН
Просто ориентир для комитета github-действия SCM_ПОЛЬЗОВАТЕЛЬСКИЙ_РЕФ
Включает элементы управления кодом git для проверки, фиксации и пометки. github-действия SCM_ПАССВОРД_РЕФ

Создание искусственных маркеров аутентификации

Существует 2 шага для настройки маркеров аутентификации на основе артефактов:

  • Создание группы и разрешений для доступа к репозиториям
  • Использование командной строки для создания токенов

В вашем недавно созданном экземпляре Artifactory мы хотим сначала создать группу, которой мы можем назначить разрешения.

  1. Получите доступ к Artifactory и перейдите к: Администрирование → Идентификация и доступ → Группы и нажмите “Создать новую группу”.
  2. Дайте группе имя и нажмите “Сохранить”.

Затем мы хотим создать схему разрешений для выделения группе.

  • Получите доступ к Администрированию → Удостоверение и доступ → Разрешения и нажмите “Новое разрешение”.
  • Дайте разрешению имя (например, учебник-cicd)
  • Нажмите Добавить репозитории и выберите репозитории, к которым вы хотите предоставить доступ (библиотеки-выпуск-локальная, библиотеки-снимок-локальная) и нажмите Сохранить
  • Нажмите на знак “плюс” в разделе “Сборки”, затем выберите “Любой”
  • Затем перейдите на вкладку Группы и нажмите знак плюс
  • Перетащите группу действия-cicd вправо и нажмите “Ок”.
  • Теперь мы хотим выбрать разрешения хранилища, поэтому выберите: Чтение, Развертывание/Кэширование
  • Далее мы хотим разрешить разрешения на сборку, поэтому выберите: Читать, Развертывать
  • Нажмите “Создать”, чтобы вернуться к экрану разрешений
  • Нажмите “Сохранить”

Генерация искусственных токенов аутентификации

В пользовательском интерфейсе Artifactory невозможно настроить токены аутентификации, поэтому мы будем использовать командную строку для их создания.

Сначала давайте настроим некоторые переменные среды в терминале:

$ export ART_USERNAME= #name used to log in to your artifactory
$ export ART_PASSWORD= # password to log in to your artifactory
$ export ART_GROUP=tutorial-cicd
export ART_HOSTNAME= # hostname of your artifactory instance

Далее давайте вызовем ваш искусственный API для создания токена:

$ curl -u "${ART_USERNAME}:${ART_PASSWORD}" -XPOST "https://${ART_HOSTNAME}/artifactory/api/security/token" \
  -d "username=stream-github-actions" \
  -d scope="member-of-groups:${ART_GROUPNAME} api:*" \
  -d expires_in=0

Главное, на что здесь следует обратить внимание, – это масштаб:

область действия=”член группы:${ИМЯ ART_GROUP} api:*”

член групп гарантирует, что группа, которую мы только что создали с разрешениями, будет выделена пользователю stream-github-действия гарантируя, что токен предоставляет необходимые нам разрешения.

Вы также заметите, что мы установили expire_in=0 что гарантирует, что токен не истечет .

Ответ должен быть похож на:

{
  "scope" : "member-of-groups:actions_cicd api:*",
  "access_token" : "xxxxxxxxx",
  "expires_in" : 0,
  "token_type" : "Bearer"
}

Убедитесь, что вы держите имя пользователя и токен под рукой, так как, как только мы добавим его в GitHub Secrets, вы больше никогда его не увидите!

Затем мы должны убедиться, что можем использовать эти значения, и, поскольку это конфиденциальные данные, мы будем использовать секреты GitHub для управления ими.

Откройте репозиторий GitHub для вашей сборки и перейдите в раздел Настройки → Секреты.

Нажмите “Создать секрет” и создайте следующий секрет:

ARTIFACTORY_ТОКЕН Возвращаемое значение

Время переходить к настройке вашего проекта maven!

Что необходимо настроить:

  • Профиль Maven
    • Используется для обеспечения того, чтобы мы использовали правильные репозитории при создании проекта в действиях GitHub
  • Настройка SCM
    • Это определяет, где существует код, чтобы при выполнении выпуска maven мог подключиться к репозиторию GitHub.
  • Учетные данные хранилища как для Artifactory, так и для GitHub в Maven settings.xml файл
  • Плагин maven-artifactory-плагин
  • Плагин maven-release-плагин

Профили Maven удобны для настройки способа управления зависимостями на основе определенных параметров. Например, у вас может быть локальная настройка, которая извлекает данные из репозиториев по умолчанию, которые вам нужны. Вы также можете добавить репозиторий в локальную настройку со своими личными учетными данными. Однако этот файл ( settings.xml ) не является портативным.

Мы настроим репозитории в проекте pom.xml и активируйте его только тогда, когда настроена переменная среды (BUILD_ENV).

В вашем проекте pom.xml файл, который мы хотим сначала добавить в следующий профиль:


  
    github-actions
    
      
        env.BUILD_ENV
        github-actions
      
    
    
      
        artifactory
        your-artifactory
        https://your-artifactory.jfrog.io/artifactory/libs-release-local
        
          true
        
        
          false
        
      
    
    
      
        artifactory
        your-artifactory
        https://your-artifactory.jfrog.io/artifactory/libs-release-local
        
          true
        
        
          false
        
      
      
        
          false
        
        central
        bintray-plugins
        https://jcenter.bintray.com
      
    
  

Так что же мы только что сделали?

Выше мы создали новый профиль, который будет активен только в том случае, если вы установили для переменной среды BUILD_ENV значение github-действия – мы будем управлять этим в нашем конвейере действий GitHub.

Далее мы определили репозитории, из которых будем извлекать зависимости. Artifactory действует как прокси-сервер для артефактов, которые считаются стандартным доступом. Тем не менее, теперь он будет искать в вашей клиентской базе артефактов любые зависимости, которые вы уже выпустили и сохранили.

Наконец, нам все еще нужно загрузить определенные плагины, которые исходят из репозитория BinTray ( maven-artifactory-плагин ) именно поэтому мы добавили в репозиторий плагинов BinTray.

Учетные данные для вашего репозитория будут настроены за пределами pom.xml в обычае settings.xml файл, который мы настроим в нашем конвейере сборки.

Настройка плагина

Как уже упоминалось, нам нужно настроить 2 плагина:

  • Плагин выпуска Maven включит выпуск: подготовка и релиз: выполните действия.

В вашем pom.xml обновите раздел <сборка> с помощью:


  
    
        maven-release-plugin
        3.0.0-M1
        
          v@{project.version}
        
      
      
        org.jfrog.buildinfo
        artifactory-maven-plugin
        2.7.0
        false
        
          
            build-info
            
              publish
            
            
              
                https://your-artifactory.jfrog.io/artifactory
                stream-github-actions
                ${env.ARTIFACTORY_TOKEN}
                libs-release-local
                libs-snapshot-local
              
            
          
        
      
  

Вы можете видеть в плагине Artifactory, что мы передаем сгенерированный токен в качестве пароля через переменную среды. Это будет использоваться только тогда, когда мы отправим файл jar в наш экземпляр Artifactory.

Настройка SCM

Чтобы мы могли выполнять выпуски с версиями, нам необходимо настроить поставщика SCM.

В pom.xml вы хотите добавить следующее где-то в верхней части файла:

  
    scm:git:https://github.com/your-org/your-repo.git/
    https://github.com/your-org/your-repo
    HEAD
  

Здесь мы указали тип поставщика scm ( scm:git ) и местоположение репозитория. Мы также хотим убедиться, что, когда мы выпустим, maven пометит РУКОВОДИТЕЛЬ филиала с новой версией.

Последним пунктом настройки будет настройка учетных данных нашего сервера:


  ...
  github

Это указывает на конфигурацию сервера, которую мы собираемся использовать в settings.xml файл, который мы создадим в действиях на GitHub, гарантирует, что мы сможем успешно пометить и обновить версию проекта.

Ладно, это было долгое путешествие до сих пор но мы близки к финишу. Теперь мы собираемся взять то, что мы создали, и построить наш конвейер сборки и выпуска.

Что мы будем использовать

Сначала позвольте мне обрисовать в общих чертах, что мы будем делать:

  • Создайте стандартный конвейер сборки Maven действий GitHub
  • Настройка 2 заданий:
    • Сборка и модульное тестирование
    • Подготовка и выполнение выпуска

Задание сборки и модульного тестирования будет выполняться во всех ветвях и запросах на извлечение, однако наш выпуск будет выполняться только в главной ветви.

Базовая Сборка

Перейдите в свой репозиторий GitHub и выберите Действия, а затем выберите Java с помощью Maven – Настройте этот рабочий процесс:

А пока давайте просто приступим к сборке с базовой настройкой, поэтому давайте внесем некоторые небольшие изменения:

name: Java CI with Maven

on:
  push:
    branches: [ "**" ]
  pull_request:
    branches: [ master ]

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.2
      - name: Build with Maven
        run: mvn -B package --file pom.xml

Первое изменение, которое мы внесем, – это обеспечить выполнение сборки во всех ветвях, чтобы вы могли изменить на.толкать.ветви к ["**"]

Затем я настроил JDK для сборки, установив java-версию в 11.0.2 .

На данный момент зафиксируйте файл, и должна быть запущена самая первая сборка.

Теперь мы настроим settings.xml файл.

Настройка параметров

Зачем нам нужен этот файл? Как упоминалось ранее, нам нужно где-то хранить учетные данные, в этом случае мы будем ссылаться на переменные среды, чтобы убедиться, что мы не предоставляем никаких конфиденциальных данных.

Действие, которое мы будем использовать для создания файла, – это whelk-io/maven-настройки-xml-действие @v11 Это позволит нам создать специально построенный settings.xml файл, который будет использовать maven:

name: Java CI with Maven

on:
  push:
    branches: [ "**" ]
  pull_request:
    branches: [ master ]

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.2
      - name: Setup Maven settings.xml
        uses: whelk-io/maven-settings-xml-action@v11
        with:
          servers: |
            '[
              {
                "id": "artifactory",
                "username": "${env.ARTIFACTORY_USERNAME_REF}",
                "password": "${env.ARTIFACTORY_TOKEN_REF}"
              }
            ]'
     - name: Build with Maven
       env:
          ARTIFACTORY_USERNAME_REF: "stream-github-actions"
          ARTIFACTORY_TOKEN_REF: ${{ secrets.ARTIFACTORY_TOKEN }}
          BUILD_ENV: 'github-actions'
       run: mvn -B package --file pom.xml

Как вы можете видеть, мы не внедряем никаких конфиденциальных данных, только переменные среды. Когда на этом шаге выполняется вновь созданный settings.xml файл будет существовать со следующим содержимым:


  
    
      artifactory
      ${env.ARTIFACTORY_USERNAME_REF}
      ${env.ARTIFACTORY_TOKEN_REF}
    
  

Теперь, когда выполняется сборка, мы хотим использовать введенные секреты в качестве этих переменных среды.

Вы также заметите, что мы устанавливаем переменную среды BUILD_ENV , чтобы Maven использовал профиль, который мы настроили с помощью артефактов извлечения с нашего собственного сервера артефактов.

Вы также можете увидеть в maven.yml файл сборки, в котором мы сопоставляем наши секреты и значения с переменными среды, которые наши pom.xml и settings.xml используются файлы.

Зафиксируйте изменения, и ваша сборка должна запуститься и извлечь зависимости из вашего собственного экземпляра Artifactory.

Выполнение выпуска

Теперь, когда у нас успешно запущена сборка, мы можем применить выпуск и версию нашего артефакта. Как упоминалось ранее, мы обязательно добавим версию артефакта и перейдем в Artifactory только тогда, когда слияние с мастером будет успешным.

Большинство строительных блоков уже на месте, и нам просто нужно добавить этап выпуска в наш файл main.yml actions:

name: Java CI with Maven

on:
  push:
    branches: [ "**" ]
  pull_request:
    branches: [ master ]

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.2
      - name: Setup Maven settings.xml
        uses: whelk-io/maven-settings-xml-action@v11
        with:
          servers: |
            '[
              {
                "id": "artifactory",
                "username": "${env.ARTIFACTORY_USERNAME_REF}",
                "password": "${env.ARTIFACTORY_TOKEN_REF}"
              }
            ]'
     - name: Build with Maven
       env:
          ARTIFACTORY_USERNAME_REF: "stream-github-actions"
          ARTIFACTORY_TOKEN_REF: ${{ secrets.ARTIFACTORY_TOKEN }}
          BUILD_ENV: 'github-actions'
       run: mvn -B package --file pom.xml

  release:
    runs-on: ubuntu-latest
    needs: build
    if: github.ref == 'refs/heads/master'

    steps:
      - uses: actions/checkout@v2
      - name: Setup JDK 11
        uses: actions/setup-java@v1.3.0
        with:
          java-version: 11.0.2

      - name: maven-settings-xml-action
        uses: whelk-io/maven-settings-xml-action@v11
        with:
          servers: '
            [
              {
                "id": "github",
                "username": "${env.SCM_USERNAME_REF}",
                "password": "${env.SCM_TOKEN_REF}"
              },
              {
                "id": "artifactory",
                "username": "${env.ARTIFACTORY_USERNAME_REF}",
                "password": "${env.ARTIFACTORY_TOKEN_REF}"
              }
            ]'
      - name: Configure git
        run: |
          git config --global committer.email "noreply@github.com"
          git config --global committer.name "GitHub"
          git config --global author.email "${GITHUB_ACTOR}@users.noreply.github.com"
          git config --global author.name "${GITHUB_ACTOR}"
      - name: Prepare the release
        env:
          SCM_USERNAME_REF: 'github-actions'
          SCM_TOKEN_REF: ${{ secrets.GITHUB_TOKEN }}
          ARTIFACTORY_USERNAME_REF: "stream-github-actions"
          ARTIFACTORY_TOKEN_REF: ${{ secrets.ARTIFACTORY_TOKEN }}
          BUILD_ENV: 'github-actions'
        run: |
          ./mvnw --batch-mode release:prepare
      - name: Push the release
        env:
          SCM_USERNAME_REF: 'github-actions'
          SCM_TOKEN_REF: ${{ secrets.GITHUB_TOKEN }}
          ARTIFACTORY_USERNAME_REF: "stream-github-actions"
          ARTIFACTORY_TOKEN_REF: ${{ secrets.ARTIFACTORY_TOKEN }}
          ARTIFACTORY_TOKEN:  ${{ secrets.ARTIFACTORY_TOKEN }}
          BUILD_ENV: 'github-actions'
        run: ./mvnw --batch-mode release:perform
      - name: Rollback if failure
        if: ${{ failure() }}
        run: ./mvnw --batch-mode release:rollback

Здесь мы представляем 6 шагов:

  1. Настройте свой JDK, который мы хотим создать с помощью
  2. Создайте свой settings.xml файл, но на этот раз с новой записью сервера для GitHub
  3. Настройте имя пользователя Git для коммитов
  4. Этап подготовки выпуска
  5. Шаг выполнения выпуска
  6. Если процесс выпуска завершится неудачно, мы хотим откатить шаги, которые настраивали выпуск.

Чтобы предотвратить запуск задания выпуска до того, как мы успешно построим и протестируем проект, мы включили директиву потребности: сборка . Это гарантирует, что, если задание сборки не будет выполнено, задание выпуска не будет запущено.

Мы также проверяем, что мы запускаем выпуск только в главной ветви, как указано в если: Мы также проверяем, что мы запускаем выпуск только в главной ветви, как указано в

Чтобы аутентифицировать GitHub, мы добавили новый сервер в ваш settings.xml файл. Если вы помните, мы добавили свойство в pom.xml файл >github > который указывает maven использовать конфигурацию сервера GitHub с идентификатором “github”. >github >

Также обратите внимание, что мы используем зарезервированный секрет для учетных данных для GitHub: секрет. GITHUB_ТОКЕН . Это зарезервированный секрет, который позволяет вам использовать его для любых действий, которые вам необходимо выполнить в хранилище.

Как только вы передадите свою работу мастеру, сборка должна запуститься, ваш релиз будет запущен, и вы найдете новый тег версии и артефакт, загруженный в ваш экземпляр Artifactory.

Оригинал: “https://dev.to/anthonyikeda/github-actions-maven-artifactory-4h65”