#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.*$/
, отлично подойдет для нашего варианта использования; тестируем его сейчас