jenkins - GenericWebhookTrigger 未触发特定构建
问题描述
我让 Jenkins 正常运行,并且管道的规格如下。我将管道配置设置为使用具有与管道中指定的相同配置的通用 Webhook 触发器。webhook 也在我的 gitbucket 存储库中配置为仅发送推送触发器。但是当我对其进行测试时,响应为 200,并且正文响应为“已触发”:false。
管道:
pipeline {
agent any
triggers {
GenericTrigger(
genericVariables: [
[key: 'ref', value: '$.ref']
],
genericHeaderVariables: [
[key: 'X-GitHub-Event', regexpFilter: '']
],
causeString: 'Triggered on $ref',
token: '123456',
printContributedVariables: true,
printPostContent: true,
silentResponse: false,
regexpFilterText: '$ref',
regexpFilterExpression: 'refs/heads/' + 'master'
)
}
stages{...
来自 gitbucket webhook 的响应正文:
{"status":"ok","data":{"triggerResults":{"testePipeline":{"id":0,"regexpFilterExpression":"refs/heads/master","regexpFilterText":"","resolvedVariables":{"ref":"","x_github_event":"","x_github_event_0":""},"triggered":false,"url":""}}}}
解决方案
就我而言,问题出在 GitLab 方面。使用此配置:
triggers {
GenericTrigger(
genericVariables: [
[key: 'user_name', value: '$.user_name'],
[key: 'checkout_sha', value: '$.checkout_sha'],
[key: 'web_url', value: '$.project.web_url'],
[key: 'ref', value: '$.ref'],
[key: 'tag', value: '$.ref', regexpFilter: 'refs/tags/'],
],
causeString: '$user_name pushed tag $tag to $web_url referencing $checkout_sha',
token: 'abc123',
printContributedVariables: true,
printPostContent: true,
silentResponse: false,
regexpFilterText: '$ref',
regexpFilterExpression: '^refs/tags/.*'
)
}
如果我从终端推送标签或在 GitLab WebUI 上添加标签,但无法通过测试“标签推送” webhook 按钮执行相同操作,我可以使用标签推送webhook。
原来这是一个已知问题:https : //gitlab.com/gitlab-org/gitlab-foss/issues/52556 在这两种情况下,请求标头将是相同的推送。
测试 Push 触发后的请求标头和正文部分:
Content-Type: application/json
X-Gitlab-Event: Push Hook
{
"object_kind": "push",
"event_name": "push",
"before": "ab5183fcf2d4e698f1cf6228d0c1532ac7815bcc",
"after": "3045da963cc63720c3bbc3c1217ecf2708035bfe",
"ref": "refs/heads/master",
.
.
.
测试标签推送触发后的请求标头和正文部分:
Content-Type: application/json
X-Gitlab-Event: Tag Push Hook
{
"object_kind": "push",
"event_name": "push",
"before": "ab5183fcf2d4e698f1cf6228d0c1532ac7815bcc",
"after": "3045da963cc63720c3bbc3c1217ecf2708035bfe",
"ref": "refs/heads/master",
.
.
.
我强烈建议您也检查请求标头和正文。当然,如果您的过滤器正常工作,则可能会出现"triggered": false 。例如,如果我发送一个常规的推送事件,结果将是成功并带有错误的触发状态。这是正确的,因为触发器运行良好,但您的过滤器也是如此。
推荐阅读
- java - 将令牌添加到 AWS api 网关的 http
- python - 过滤列表中与每行 pandas 的条件匹配的第一个元素
- javascript - 使用 Emotion 样式 + material-ui + typescript 的类型实例化太深并且可能是无限的
- java - Java 异常设计:必须被捕获或声明被抛出 => 太多的代码影响
- python-3.x - 如何使用机器人框架 selenium2Library 单击框架内的链接?
- c# - 如何在 asp.net 中正确地将查询转换为 DateTime?
- awk - awk 中的 int() 函数会更改参数,即使这已经是整数
- vuejs2 - 在 vuejs 中选择选项时如何获取 optgroup 标签?
- powerbi - 如何更改已发布 Power BI 应用的所有者
- java - Java 8:Sonar 兼容的服务器套接字