等到 webhook 被触发

Wait until a webhook is triggered

我想在流水线中间放置一些东西,等待网络挂钩被命中。理想情况下,我的管道将执行以下操作:

  1. 部署到 QA
  2. 合并请求
  3. 部署到 UAT
  4. 部署到产品

我在 "Merge Request" 阶段创建合并请求(在 GitLab 中)。那部分完成了。我现在想等到合并请求被接受,然后再进入下一阶段。我希望它成为一个 webhook。

我可以编写一些代码来轮询请求,但我想尽可能避免轮询。

我不确定是否有插件允许您在等待 webhook 时阻止作业执行。

我认为更直接的方法是将您的管道一分为二:

  • QA + 合并请求
  • UAT + 产品

可以将第二个管道配置为使用 README.md 中的 GitLab plugin for Jenkins. As I understand it, you can follow the example 触发,但是您的触发器应该仅在向目标分支进行推送时触发,例如如果您所有的合并请求都以 master:

为目标
triggers {
    gitlab(triggerOnPush: true, triggerOnMergeRequest: false, branchFilterType: 'master')
}

这里的好处是您在等待 webhook 时不会占用从站(这可能需要一段时间,具体取决于合并请求中更改的大小以及审查它们的人)。

这引发的唯一问题是您是否必须跨两个剧本维护状态。我之前写过管道,在相关资源的名称中使用唯一的 sha。在您的场景中,您将无法访问第二个管道中的该变量。

我通过 GitLab API 创建我的合并请求来解决这个问题。然后轮询 API 并等待状态为 'merged'。我宁愿有一个 webhook 来避免轮询。但是 waitUntil 函数会慢慢增加轮询之间的时间,因此不会对系统造成太大负担。