У меня есть 2 проекта Project A и Project B, теперь я хочу, чтобы на какой-то стадии конвейера GitLab CI проекта A должен был запускаться конвейер GitLab CI в проекте B, а затем ждать завершения конвейера проекта B, а затем в конечном итоге проектировать конвейер GitLab CI.будет успешно завершен на основе успешного выполнения проекта B конвейера GitLab CI
В моей компании у меня есть версия 11.8.0 сообщества gitlab, из-за которой я сталкиваюсь с проблемами при запуске нисходящего конвейера с помощью задания моста и затем ждупроект B, чтобы закончить многопроектные трубопроводы gitlab.Премиум Gitlab легко справился бы с вышеуказанным требованием, используя ключевые слова триггера и проекта, указанные в url-creation-multi-project-pipelines-from-gitlab-ciyml .
Я сделал 2 варианта ниже
Вариант 1)
Ну, я подумал, Pipeline-Trigger поможет, который обеспечивает изображение докера в конвейере GitLab CI.
Я создал private_token с полным доступом API , используя , затем использовал, что private_token в CI_JOB_TOKEN, упомянутом ниже, имеет токен проекта, как упомянуто здесь, ниже файл yaml для проекта A
image: katalonstudio/katalon
services:
- docker:dind
variables:
PRE_RENDER_ALL: 'false'
APP_PROJECT_ID: 274
GIT_SSL_NO_VERIFY: "true"
API_TOKEN: $PERSONAL_ACCESS_TOKEN
TARGET_BRANCH: master
stages:
- trigger
trigger:
stage: trigger
image: registry.gitlab.com/finestructure/pipeline-trigger
tags:
- docker
script:
- trigger -p "$CI_JOB_TOKEN" -t master --on-manual pass 274
Ошибка, которую я получаю на конвейере Gitlab CI для проекта A:
$ trigger -p "$CI_JOB_TOKEN" -t master --on-manual pass 274
Triggering pipeline for ref 'master' for project id 274
Traceback (most recent call last):
File "/usr/bin/trigger", line 299, in <module>
trigger(sys.argv[1:])
File "/usr/bin/trigger", line 217, in trigger
pid = create_pipeline(project_url, pipeline_token, ref, variables)
File "/usr/bin/trigger", line 87, in create_pipeline
assert r.status_code == 201, f'Failed to create pipeline, api returned
status code {r.status_code}'
AssertionError: Failed to create pipeline, api returned status code 404
ERROR: Job failed: exit code 1
Вот файл yaml для проекта B
image: katalonstudio/katalon
services:
- docker:dind
stages:
- test
test_job:
stage: test
tags:
- docker
script:
- katalon-execute.sh -browserType="Chrome" -retry=0 -statusDelay=15 -testSuitePath="Test Suites/LightRegression"
artifacts:
name: "$CI_COMMIT_REF_NAME"
paths:
- report/
reports:
junit:
- 'report/*.xml'
Опция2) Это работает хорошо, но есть ограничение, которое, хотя конвейер GitLab CI в проекте A запускает конвейер GitLab CI в проекте B, но просто передает управление проекту B и проекту A для успешного завершения и показывает greeОтметьте галочкой конвейер, который не является моим требованием
image: katalonstudio/katalon
services:
- docker:dind
variables:
PRE_RENDER_ALL: 'false'
APP_PROJECT_ID: 274
GIT_SSL_NO_VERIFY: "true"
API_TOKEN: $PERSONAL_ACCESS_TOKEN
TARGET_BRANCH: master
stages:
- trigger
trigger:
stage: trigger
tags:
- docker
script:
- curl -k --request POST --form token="$CI_JOB_TOKEN" --form ref=master https://git.abc.hasro.com/api/v4/projects/$APP_PROJECT_ID/trigger/pipeline
Поскольку у меня есть 2 проекта, Проект A и Проект B, все, что я хочу на какой-то стадии конвейера GitLab CI проекта A, должно запускать конвейер GitLab CI в проекте B, а затемдождитесь завершения конвейера проекта B, затем в конечном итоге конвейер GitLab CI проекта A будет успешно завершен на основании успешного выполнения конвейера GitLab CI проекта B