是否可以对不是 Gitlab/CI 管道的第一个阶段的阶段使用触发器?

时间:2021-02-19 16:09:40

标签: gitlab-ci

我有一个 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 阶段甚至没有出现在管道菜单中,所以我想知道是否可以在整个管道启动后对作业使用触发器。

1 个答案:

答案 0 :(得分:0)

这是可能的。

您可以通过添加此配置手动触发 waitForTestsToEnd 中的作业:

when: manual
allow_failure: false

当您触发 Jenkins 进程时,请包括 GitLab 项目 ID(CI_PROJECT_ID 环境变量)和管道 ID(CI_PIPELINE_IDCI_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