Как создать версию артефактов с помощью GitHub Actions?
Мой вариант использования - я хочу иметь уникальный номер версии для артефактов для каждой сборки / прогона. С текущими инструментами, такими как CircleCI, Travis и т. Д., Доступен номер сборки, который, по сути, всегда увеличивается. Итак, я могу создавать строки версий, такие как 0.1.0-27
, Этот счетчик увеличивается каждый раз даже для одного и того же коммита.
Как я могу сделать что-то подобное с GitHub Actions? Действия Github предлагают только GITHUB_SHA и GITHUB_REF.
7 ответов
GitHub Actions теперь имеет уникальный номер и идентификатор для запуска / сборки в github
контекст.
github.run_id: уникальный номер для каждого запуска в репозитории. Это число не изменится, если вы повторно запустите рабочий процесс.
github.run_number: уникальный номер для каждого запуска определенного рабочего процесса в репозитории. Это число начинается с 1 для первого запуска рабочего процесса и увеличивается с каждым новым запуском. Это число не изменится, если вы повторно запустите рабочий процесс.
ссылка: https://docs.github.com/en/actions/reference/context-and-expression-syntax-for-github-actions
Вы можете ссылаться на них в таких рабочих процессах:
- name: Output Run ID
run: echo ${{ github.run_id }}
- name: Output Run Number
run: echo ${{ github.run_number }}
У меня была такая же проблема, и я только что создал действие для генерации последовательных номеров сборки. Используйте это как
- uses: einaregilsson/build-number@v1
with:
token: ${{secrets.github_token}}
Постепенно после этого у вас будет BUILD_NUMBER
переменная окружения. Дополнительную информацию об использовании одного и того же номера сборки для разных заданий и многое другое на https://github.com/einaregilsson/build-number/
Вы можете использовать GitVersion для создания инкрементных версий из тегов в Git. PR на https://github.com/GitTools/GitVersion/pull/1787 содержит некоторые подробности, но в основном вы можете определить это задание:
- uses: actions/checkout@v1
- name: Get Git Version
uses: docker://gittools/gitversion:5.0.2-beta1-34-linux-debian-9-netcoreapp2.1
with:
args: /github/workspace /nofetch /exec /bin/sh /execargs "-c \"echo $GitVersion_MajorMinorPatch > /github/workspace/version.txt\""
Если вам нужно постоянное целочисленное приращение (1,2,3,4,5), я не нашел в документах ничего такого, что вы могли бы использовать в качестве такого приращения, которое бы знало, сколько раз выполнялось это конкретное действие. Есть два решения, которые я могу придумать:
Поддержание состояния на репо: например, с
count.build
файл, который использует идентификатор рабочего процесса, и вы увеличиваете его при сборке. Это мое наименее любимое решение из двух, потому что оно добавляет другие сложности, как если бы оно само вызывало событие push. Вы можете хранить этот файл где-нибудь еще, например, S3 или в Gist.Использование даты: если вы не беспокоитесь о последовательности приращения целого числа, вы можете просто использовать текущие данные и время, например
0.1.0-201903031310
на сегодня в 13:10.
Независимо от того, есть ли у вас действия Beta Access, я бы определенно вернул это на GitHub.
Надеюсь, поможет.
Если вы хотите извлечь номера версий GitHub и поместить их в файл JSON, который можно будет импортировать в ваше приложение, я сделал следующее (перед созданием приложения):
- name: Add version info to json file
env:
Version: ${{ github.run_id }}.${{ github.run_number }}.${{ github.run_attempt }}
run: |
echo "{\"version\": \"$Version\"}" > /assets/version.json
Я использую его в своем докере следующим образом:
- name: Push Docker image with incremented version tag
uses: docker/build-push-action@v2
with:
context: .
push: true
tags: ${{secrets.DOCKER_USERNAME}}/${{secrets.DOCKER_IMAGE_NAME}}:${{ github.run_number }}
Чтобы сохранить приращение (или любые другие строки данных), вы можете использовать переменные репозитория, но невозможно установить их напрямую, как локальные переменные ENV. Используйте GitHub Actions API, чтобы установить для переменной нужное значение.
https://docs.github.com/en/rest/actions/variables?apiVersion=2022-11-28
например
curl --location --request PATCH 'https://api.github.com/repos/my_org/any_app/actions/variables/BUILD_INCREMENT' \
--header 'Accept: application/vnd.github+json' \
--header 'Authorization: Bearer ghp_Fd6N34L9sometoken' \
--header 'Content-Type: text/plain' \
--header 'X-GitHub-Api-Version: 2022-11-28' \
--data '{"name":"BUILD_INCREMENT","value":"1111"}'
Такое решение позволяет контролировать приращение и редактировать его при необходимости.
PS Спасибо Микки Гуссету с YouTube. Его советы помогли мне найти эту информацию.