#git #gitlab-ci
# #git #gitlab-ci
Вопрос:
У меня есть 3 этапа:
test
build
deploy
Моя цель — определить в моем gitlab_ci.yaml
файле, смогла ли новая созданная мной ветка проверить, впервые ли она запускается на deploy
сцене. Нравится:
.deploy:
stage: deploy
script:
# - if ${CI_FIRST_TIME} then
- echo "please, it is my ${CI_FIRST_TIME}"
# - else
- echo "not my first time"
Я пытаюсь что-то сформулировать в своей голове, но это всегда заходит в тупик. Хотелось бы посмотреть, есть ли какая-нибудь умная идея для выполнения этого.
Ответ №1:
Похоже, вы могли бы использовать переменную CI_COMMIT_BEFORE_SHA
среды (https://docs.gitlab.com/ee/ci/variables/predefined_variables.html#predefined-variables-reference ), поскольку это представляет:
Предыдущий последний коммит присутствует в ветке или теге. Всегда 0000000000000000000000000000000000000000000000 в конвейерах запросов на слияние и для первого коммита в конвейерах для ветвей или тегов.
Итак, что-то вроде (псевдокод):
.deploy:
stage: deploy
script:
# - if $CI_COMMIT_BEFORE_SHA == "0000000000000000000000000000000000000000" then
- echo "please, it is my ${CI_FIRST_TIME}"
# - else
- echo "not my first time"
Ответ №2:
В настоящее время нет встроенного способа сделать это, но вы могли бы реализовать что-то, чтобы отслеживать это самостоятельно.
Допустим, у вас есть таблица mysql ‘branch_pipelines’, которая содержит следующие поля: ‘id’, ‘branch_name’, ‘pipeline_id’, ‘commit_sha’ …, а ‘branch_name’ и ‘commit_sha’ вместе являются уникальным индексом. Затем в моем конвейере я мог бы использовать mysql:8
(или любое другое) изображение, подключиться к базе данных, в которой хранится эта информация, и проверить, присутствует ли текущая ветвь в таблице.
Если нет, то это первый раз. Если да, вы можете проверить коммиты, чтобы узнать, сколько раз, и посмотреть, присутствует ли этот коммит, чтобы узнать, является ли это повторным заданием или новым нажатием. Затем, если это первый конвейер для этого коммита, добавьте его в таблицу.
Используемые предопределенные переменные:
$CI_COMMIT_REF_NAME
: имя ветки или тега$CI_COMMIT_SHA
: sha фиксации (также может использоваться$CI_COMMIT_SHORT_SHA
для сокращенного sha)
Список всех предопределенных переменных находится здесь: https://docs.gitlab.com/ee/ci/variables/predefined_variables.html