我有一个 Gitlab/ci 项目并且正在努力使其与另一个 jenkins 项目一起工作,gitlab ci 的阶段如下:
#gitlab-ci.yml
stages:
- build
- notifyJenkinsToStartTests
- waitForTestsToEnd
build 是由 gitlab 上的合并请求触发的标准构建阶段。
notifyJenkinsToStartTests 在构建阶段结束后启动,并使用 curl 触发 Jenkins 开始一系列测试。
问题是我希望 waitForTestsToEnd 阶段仅在 Jenkins 的测试结束后才开始。为了做到这一点,我在 settings - CI/CD 上创建了一个触发器,并像这样配置了 waitForTestsToEnd 阶段:
#waitForTestsToEnd
needs:
- notifyJenkinsToStartTests
only:
- triggers
(我需要上一阶段的一些人工制品,这就是为什么我需要 notifyJenkinsToStartTests)
对于 jenkins 方面的通知,我使用了建议的 curl(并添加了正确的登录名):
curl -u login:password -X POST \
-F token=TOKEN \
-F ref=REF_NAME \
https://gitlab*****/api/v4/projects/****/trigger/pipeline
问题是 waitForTestsToEnd 阶段甚至没有出现在管道菜单中,所以我想知道是否可以在整个管道启动后对作业使用触发器。
答案 0 :(得分:0)
这是可能的。
您可以通过添加此配置手动触发 waitForTestsToEnd
中的作业:
when: manual
allow_failure: false
当您触发 Jenkins 进程时,请包括 GitLab 项目 ID(CI_PROJECT_ID
环境变量)和管道 ID(CI_PIPELINE_ID
或 CI_PIPELINE_IID
,不确定是哪个..)。 Jenkins 完成后,它可以使用 GitLab API list jobs in the GitLab pipeline。
GET /projects/:id/pipelines/:pipeline_id/jobs
当您有等待触发的手动作业的作业 ID 时,您可以使用 GitLab API trigger it:
POST /projects/:id/jobs/:job_id/play