当提交推送到另一个项目时触发项目构建

trigger a build on a project when a commit pushes to another project

我在带有 gitlab-runner 机器的 gitlab 上有三个项目 A、B、C。项目 A 包含 gitlab-ci.yml 文件,该文件在 A 上有提交时调用脚本来构建程序:

  build:
  stage: build
  script:
    - ./build-platform.sh

A 依赖于 B 和 C 项目。当 B 或 C 上有提交时,如何触发 A 上的构建。我不能将 B、C 放在 A 中,也不能轻松地将 build-platform.sh 转换为 gitlab-ci.yml 文件语法。

有几种方法可以做你想做的事,但它们都依赖于你在 gitlab 中投影 A 的设置并添加一个触发令牌。这是通过单击 触发器 部分中的 Add trigger 通过 <project A's gitlab URL>/settings/ci_cd 页面完成的。

您还可以从该页面找到使用该触发令牌的不同方式。

为了完整起见,这里提到了一些方法:

1 使用 cURL

如果您可以在项目 B 或 C 的构建结束时使用 curl,则只需添加以下内容:

curl -X POST \
     -F token=TOKEN \
     -F ref=REF_NAME \
     <gitlab_url>/api/v3/projects/1/trigger/builds

其中 TOKEN 是您刚刚为项目 A 生成的触发令牌,REF_NAME 是 运行 构建的分支或标记的名称。

如果您有项目 B 和 C 的自动构建(例如使用 .gitlab-ci.yml 文件),则可以完成此操作。

2 使用网络钩子

您可以通过这些项目的 settings/integrations 页面向项目 B 和 C 添加 Webhook。

只需在推送事件上添加以下 webhook:

<gitlab_url>/api/v3/projects/1/ref/REF_NAME/trigger/builds?token=TOKEN

其中TOKEN和REF_NAME同上