Как узнать, впервые ли ветка запускается на сцене в Gitlab CI?

#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