Триггер конвейера GitLab: повторный запуск последнего помеченного конвейера

#continuous-integration #gitlab-ci #gitlab-api

#непрерывная интеграция #gitlab-ci #gitlab-api

Вопрос:

У нас есть приложение (назовем его main репозиторием) на GitLab CE, в котором есть конвейер сборки и развертывания, который запускается только при развертывании тега. Это достигается с .gitlab-ci.yml помощью:

 only:
  - /^v.*$/
except:
  - branches
  

У нас также есть два других (назовем их side ) репозитория (например, translations и utils). Чего я хотел бы добиться, так это перезапустить конвейер последнего (semver) тега main , когда одна из основных ветвей этих других side репозиториев получает push. Небольшая деталь заключается в том, что один из репозиториев находится на GitHub, но я был бы рад сначала заставить их работать на GitLab, а затем работать оттуда.

Я полагаю, мне нужно будет использовать API GitLab для запуска конвейера. То, что я в настоящее время настроил для side репозитория на GitLab, — это интеграция webhook для push-событий: https://gitlab.com/api/v4/projects/{{ID}}/ref/master/trigger/pipeline?token={{TOKEN}} , где ID идентификатор main проекта и TOKEN токен развертывания для него.

Однако это вызовет только главный конвейер для нашего main репозитория. Как я мог бы заставить это (также) перезапустить конвейер с последними тегами (или последний конвейер с тегами)?

Во-вторых, как бы мне запустить это на GitHub?

Ответ №1:

Либо вы можете создать новый конвейер, указав ref , какие могут быть ветви или теги, поэтому в этом случае вам нужно знать точное значение тега https://docs.gitlab.com/ee/api/pipelines.html#create-a-new-pipeline

Или вы можете повторить попытку уже выполненного конвейера, указав его id , который вы можете получить из https://docs.gitlab.com/ee/api/pipelines.html#list-project-pipelines путем сортировки id и фильтрации по ref , но это даст вам последний конвейер с тегом /^v.*$/ , который может не совпадать с конкретной версией, которая вам нужна.

Комментарии:

1. Я думаю, что любой конвейер последнего запуска, который соответствует /^v.*$/ , отлично подойдет для нашего варианта использования; тестируем его сейчас