我有2个项目Project A和Project B,现在我希望在Project A的某个阶段中,GitLab CI管道应在项目B中触发GitLab CI管道,然后等待 项目B的管道完成,然后最终,项目A的GitLab CI管道将基于项目B的成功执行而成功完成 GitLab CI管道
在我的公司中,我拥有gitlab社区版本11.8.0,因此我正面临以下挑战 使用网桥作业触发下游管道,然后等待项目B完成多项目gitlab管道。 使用url-creating-multi-project-pipelines-from-gitlab-ciyml中提到的Trigger和project关键字,Gitlab premium可以轻松解决上述要求。
我在下面做了2个选择
选项1)
好吧,我认为Pipeline-Trigger会有所帮助,它可以在GitLab CI管道中提供docker映像。
我创建了具有完全API访问权限的private_token using ,然后在其中使用了private_token 下面提到的CI_JOB_TOKEN具有项目令牌,如下所述,下面是项目A的Yaml文件
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
我在项目A的Gitlab CI管道上遇到的错误是
$ 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
这是项目B的Yaml文件
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) 这很好用,但是有一个局限性,尽管项目A的GitLab CI管道触发了项目B中的GitLab CI管道,但是 它只是将控制权传递给项目B和项目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
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
由于我有两个项目A和项目B,所以我在项目A的某个阶段的所有GitLab CI管道都需要触发项目B中的GitLab CI管道,然后等待项目B的管道完成,然后最终项目A的GitLab CI管道将基于项目B的GitLab CI管道的成功执行而成功完成