Недавно я запустил новое доказательство концепции, которое началось с одного репозитория в 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 мы хотим сначала создать группу, которой мы можем назначить разрешения.
- Получите доступ к Artifactory и перейдите к: Администрирование → Идентификация и доступ → Группы и нажмите “Создать новую группу”.
- Дайте группе имя и нажмите “Сохранить”.
Затем мы хотим создать схему разрешений для выделения группе.
- Получите доступ к Администрированию → Удостоверение и доступ → Разрешения и нажмите “Новое разрешение”.
- Дайте разрешению имя (например, учебник-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 шагов:
- Настройте свой JDK, который мы хотим создать с помощью
- Создайте свой
settings.xml
файл, но на этот раз с новой записью сервера для GitHub - Настройте имя пользователя Git для коммитов
- Этап подготовки выпуска
- Шаг выполнения выпуска
- Если процесс выпуска завершится неудачно, мы хотим откатить шаги, которые настраивали выпуск.
Чтобы предотвратить запуск задания выпуска до того, как мы успешно построим и протестируем проект, мы включили директиву потребности: сборка
. Это гарантирует, что, если задание сборки не будет выполнено, задание выпуска не будет запущено.
Мы также проверяем, что мы запускаем выпуск только в главной ветви, как указано в если: Мы также проверяем, что мы запускаем выпуск только в главной ветви, как указано в
Чтобы аутентифицировать GitHub, мы добавили новый сервер в ваш settings.xml
файл. Если вы помните, мы добавили свойство в pom.xml
файл >github >
который указывает maven использовать конфигурацию сервера GitHub с идентификатором “github”. >github >
Также обратите внимание, что мы используем зарезервированный секрет для учетных данных для GitHub: секрет. GITHUB_ТОКЕН
. Это зарезервированный секрет, который позволяет вам использовать его для любых действий, которые вам необходимо выполнить в хранилище.
Как только вы передадите свою работу мастеру, сборка должна запуститься, ваш релиз будет запущен, и вы найдете новый тег версии и артефакт, загруженный в ваш экземпляр Artifactory.
Оригинал: “https://dev.to/anthonyikeda/github-actions-maven-artifactory-4h65”