Webhook
Webhook 是自定义的 HTTP 回调,此回调将极狐GitLab 中发生的事件的 JSON 数据发送到配置的 URI。
您可以使用 webhook 来:
- 触发 CI/CD 作业。
- 更新外部问题跟踪器。
- 部署到生产服务器。
Webhook 事件
极狐GitLab 中不同的事件都可以触发 webhook。比如:
- 向仓库推送代码。
- 在议题上发布评论。
- 创建合并请求。
有关事件的完整列表和 webhook 负载中发送的 JSON 数据,请参阅webhook 事件。
Webhook limits
JihuLab.com 强制 webhook 限制,包括:
- 每个项目或群组的最大 webhook 数。
- 每分钟的 webhook 调用次数。
- Webhook 超时持续时间。
对于极狐GitLab 私有化部署实例,管理员可以修改这些限制。
群组 Webhook
您可以配置一个群组 Webhook,它由群组中所有项目发生的事件触发。如果您在群组和项目中配置相同的 Webhook,它们都由项目中的事件触发。
群组 Webhook 也可以配置为侦听特定于群组的事件,包括:
配置 webhooks
在极狐GitLab 中创建和配置 webhook 来集成到您的项目工作流中。使用这些功能来设置满足您特定需求的 webhook。
创建 webhook
- 名称 和 描述 引入于极狐GitLab 16.9。
创建 webhook 来发送项目或群组中的事件的通知。
先决条件:
- 对于项目 Webhook,您必须至少具有项目的维护者角色。
- 对于群组 Webhook,您必须具有群组的所有者角色。
要创建 Webhook:
- 在左侧边栏中,选择 搜索或转到 并找到您的项目或群组。
- 选择 设置 > Webhook。
- 选择 添加新 Webhook。
- 在 URL 中,输入 Webhook 端点的 URL。如果 URL 包含一个或多个特殊字符,则该 URL 必须是百分比编码的。
- 可选。在 名称 和 描述 中,输入 Webhook 的名称和描述。
- 可选。在 Secret token 中,输入一个令牌来验证请求。
- 在 触发器 部分,选择事件来触发 Webhook。
- 可选。要禁用 SSL 验证,请清除 启用 SSL 验证 复选框。
- 选择 添加 Webhook。
密钥令牌与 X-Gitlab-Token
HTTP 标头一起发送,Webhook 端点可以使用此令牌验证请求的合法性。
隐藏 webhook URL 中的敏感部分
- 引入于极狐GitLab 15.5,使用名为
webhook_form_mask_url
的功能标志。默认禁用。- 在极狐GitLab 15.7 中 GA。功能标志
webhook_form_mask_url
被移除。
隐藏 webhook URL 中的敏感部分以加强安全。当 webhook 被执行时,隐藏部分被配置的值所替换,且不会被记录,另外在数据库中以加密形式存储。
要隐藏 webhook URL 中的敏感部分:
- 在左侧边栏中,选择 搜索或转到 并找到您的项目或群组。
- 选择 设置 > Webhook。
- 在 URL 中,输入 webhook 的完整 URL。
- 要定义隐藏的部分,请选择 隐藏 URL 中的部分。
- 在 URL 中的敏感部分 中,输入您要隐藏的部分。
- 在 UI 中的样子 中,输入要显示而不是隐藏部分的值。变量名称必须只包含小写字母 (
a-z
)、数字 (0-9
) 或下划线 (_
)。 - 选择 保存更改。
隐藏值在 UI 中显示为隐藏。例如,如果已定义变量 path
和 value
,webhook URL 可能如下所示:
https://webhook.example.com/{path}?key={value}
自定义标头
- 引入于极狐GitLab 16.11 并使用名为
custom_webhook_headers
的功能标志。默认启用。- 在极狐GitLab 17.0 中 GA。功能标志
custom_webhook_headers
被移除。
为 webhook 请求添加自定义标头,以对外部服务进行认证。您可以为每个 webhook 至多配置 20 个自定义标头。
自定义标头必须:
- 不覆盖交付标头的值。
- 只包含字母数字字符、句点、连字符或下划线。
- 以字母开头,以字母或数字结尾。
- 没有连续的句点、连字符或下划线。
自定义标头在最近事件中显示,值被屏蔽。
自定义 webhook 模板
- 引入于极狐GitLab 16.10,使用名为
custom_webhook_template
的功能标志。默认启用。- 在极狐GitLab 17.0 中 GA。功能标志
custom_webhook_template
被移除。
为您的 webhook 创建一个自定义负载模板,以控制请求正文中发送的数据。
创建自定义 webhook 模板
- 对于项目 webhook,您必须至少具有项目的维护者角色。
- 对于群组 webhook,您必须具有群组的所有者角色。
要创建自定义 webhook 模板:
- 转到您的 webhook 配置。
- 设置自定义 webhook 模板。
- 确保模板渲染为有效的 JSON。
在您的模板中使用事件的有效负载中的字段。例如:
- 对于作业事件使用
{{build_name}}
- 对于部署事件使用
{{deployable_url}}
为了访问嵌套的属性,请使用点分隔路径段。
自定义模板示例
对于此自定义负载模板:
{
"event": "{{object_kind}}",
"project_name": "{{project.name}}"
}
The resulting request payload for a push
event is:
{
"event": "push",
"project_name": "Example"
}
自定义 webhook 模板无法访问数组属性。
通过分支过滤推送事件
过滤器 push
事件通过分支名称发送到您的 webhook 端点。可使用如下过滤器选项:
- 所有分支:从所有分支接收推送事件。
- 通配符模式:从与通配符模式匹配的分支接收推送事件。
- 正则表达式:从与正则表达式匹配的分支接收推送事件。
使用通配模式
通过使用通配模式来过滤:
- 在 webhook 配置中,选择 通配符模式。
- 输入一个模式。
例如:
-
*-stable
以匹配以-stable
结尾的分支。 -
production/*
以匹配production/
命名空间中的分支。
-
使用正则表达式
通过正则表达式来过滤:
- 在 webhook 配置中,选择 正则表达式。
- 输入一个正则表达式,遵循 RE2 语法。
例如,要排除 main
分支,请使用:
\b(?:m(?!ain\b)|ma(?!in\b)|mai(?!n\b)|[a-l]|[n-z])\w*|\b\w{1,3}\b|\W+
配置 webhook 以支持 mutual TLS (SELF-MANAGED ONLY)
- 引入于极狐GitLab 16.9。
通过设置全局客户端证书(PEM 格式)来配置 webhook 以支持 mutual TLS。
先决条件:
- 您必须是极狐GitLab 管理员。
要为 webhook 配置 mutual TLS:
- 准备一个客户端证书(PEM 格式)。
- 可选:使用 PEM 密码保护证书。
- 配置极狐GitLab 以使用证书。
::Tabs
:::TabTitle Linux package (Omnibus)
-
Edit
/etc/gitlab/gitlab.rb
:gitlab_rails['http_client']['tls_client_cert_file'] = '<PATH TO CLIENT PEM FILE>' gitlab_rails['http_client']['tls_client_cert_password'] = '<OPTIONAL PASSWORD>'
-
保存文件并重新配置极狐GitLab:
sudo gitlab-ctl reconfigure
:::TabTitle Docker
-
编辑
docker-compose.yml
:version: "3.6" services: gitlab: image: 'gitlab/gitlab-ee:latest' restart: always hostname: 'gitlab.example.com' environment: GITLAB_OMNIBUS_CONFIG: | gitlab_rails['http_client']['tls_client_cert_file'] = '<PATH TO CLIENT PEM FILE>' gitlab_rails['http_client']['tls_client_cert_password'] = '<OPTIONAL PASSWORD>'
-
保存文件并重启极狐GitLab:
docker compose up -d
:::TabTitle Self-compiled (source)
-
编辑
/home/git/gitlab/config/gitlab.yml
:production: &base http_client: tls_client_cert_file: '<PATH TO CLIENT PEM FILE>' tls_client_cert_password: '<OPTIONAL PASSWORD>'
-
保存文件并重启极狐GitLab:
# For systems running systemd sudo systemctl restart gitlab.target # For systems running SysV init sudo service gitlab restart
::EndTabs
配置后,极狐GitLab 在 webhook 连接的 TLS 握手期间向服务器呈现此证书。
为 webhook 流量配置防火墙
基于极狐GitLab 发送的 webhooks 来为 webhook 流量配置防火墙:
- 从 Sidekiq 节点异步发送(最常见)
- 从 Rails 节点同步发送(在特定情况下)
当极狐GitLab 从 Rails 节点同步发送 webhooks 时:
- 在 UI 中测试 webhook
- 在 UI 中重试 webhook
配置防火墙时,请确保 Sidekiq 和 Rails 节点都可以发送 webhook 流量。
管理 webhooks
在极狐GitLab 中监控并维护您配置的 webhooks。
查看 webhook 请求历史
- 针对群组 webhook 的 近期事件 引入于极狐GitLab 15.3。
查看 webhook 请求历史来监控它们的性能和故障排查问题。
先决条件:
- 对于项目 webhook,您必须至少具有项目的维护者角色。
- 对于群组 webhook,您必须具有群组的所有者角色。
要查看 webhook 请求的历史记录:
- 在左侧边栏中,选择 搜索或前往 并找到您的项目或群组。
- 选择 设置 > Webhooks。
- 选择 webhook 的 编辑。
- 转到 最近事件 部分。
近期事件 部分显示了过去两天内对 webhook 所做的所有请求。该表包括:
- HTTP 状态代码:
- 绿色的
200
-299
代码 - 其他代码的红色
-
internal error
用于失败的交付
- 绿色的
- 触发事件
- 请求的经过时间
- 请求的相对时间
检查请求和响应详情
先决条件:
- 对于项目 webhook,您必须至少具有项目的维护者角色。
- 对于组 webhook,您必须具有组的所有者角色。
每个 webhook 请求在 Recent events 中都有一个 Request details 页面。此页包含标头的内容和正文:
- 极狐GitLab 从 webhook 接收器端点收到的响应
- 极狐GitLab 发送的 webhook 请求
要检查 webhook 事件的请求和响应详细信息:
- 在左侧边栏中,选择 搜索或前往 并找到您的项目或组。
- 选择 设置 > Webhooks。
- 选择 webhook 的 编辑。
- 转到 最近事件 部分。
- 选择事件的 查看详细信息。
要使用相同的数据和相同的 Idempotency-Key
标头) 再次发送请求,选择 Resend Request。如果 webhook URL 已经发生变化,您无法重新发送请求。要以编程方式重新发送,可以参考我们的 API 文档。
测试 webhook
测试 webhook 以确保其正常工作或重新启用禁用的 webhook。
先决条件:
- 对于项目 webhook,您必须至少具有项目的维护者角色。
- 对于组 webhook,您必须具有组的所有者角色。
- 为了测试
push events
,您的项目必须至少有一个提交。
要测试 webhook:
- 在左侧边栏中,选择 搜索或前往 并找到您的项目或组。
- 选择 设置 > Webhooks。
- 在配置的 webhook 列表中,找到您要测试的 webhook。
- 从 测试 下拉列表中,选择要测试的事件类型。
或者,您也可以从其编辑页面测试 webhook。
测试不支持某些类型的事件的项目和组 webhook。
Webhook 参考
使用此参考来:
- 了解极狐GitLab webhook 的工作原理。
- 将 webhook 集成到您的系统中。
- 设置、故障排除和优化您的 webhook 配置。
Webhook 接受器要求
实现快速且稳定的 webhook 接收器请求端点来确保可靠地传递 webhook。
慢速、不稳定或配置不正确的接收器可能会被自动禁用。无效的 HTTP 响应被视为失败请求。
要优化您的 webhook 接收器:
- 快速响应
200
或201
状态:- 避免在同一个请求中处理 webhook。
- 使用队列在收到 webhook 后处理 webhook。
- 在超时限制之前响应以防止在 GitLab.com 上自动禁用。
- 处理潜在的重复事件:
- 如果 webhook 超时,请准备重复事件。
- 确保您的端点始终快速且稳定。
- 最小化响应标头和正文:
- 极狐GitLab 存储响应标头和正文以供稍后检查。
- 限制返回标头的数量和大小。
- 考虑响应空正文。
- 使用适当的状态代码:
- 仅对配置错误的 webhook 返回
4xx
范围内的客户端错误状态。 - 对于不支持的事件,返回
400
或忽略有效负载。 - 避免对已处理的事件返回
500
服务器错误响应。
- 仅对配置错误的 webhook 返回
自动禁用 webhook
- 项目 webhook 在极狐GitLab 15.7 中可用。功能标志
web_hooks_disable_failed
被移除。- 群组 webhook 引入于极狐GitLab 15.10
- 在极狐Gitlab 15.10 中针对私有狐部署禁用,使用名为
auto_disabling_web_hooks
的功能标志。
极狐GitLab 会自动禁用失败四次的项目或群组 webhook。
要查看自动禁用的 webhook:
- 在左侧导航栏,选择 搜索或前往 并找到您的项目或群组。
- 选择 设置 > webhooks。
在 webhook 列表中,自动禁用的 webhook 显示为:
暂时禁用 webhooks
如果发生如下情况,webhook 将被暂时禁用:
- 返回
5xx
范围内的响应代码。 - 遇到超时。
- 遇到其他 HTTP 错误。
这些 webhook 最初被禁用一分钟后,禁用时间在后续失败中延长,最多为 24 小时。
永久禁用 webhook
如果返回 4xx
范围内的响应码,webhook 将被永久禁用,因为这意味着错误配置。
重新启用禁用的 webhook。
- 引入于极狐GitLab 15.2,使用名为
webhooks_failed_callout
的功能标志。默认禁用。- 在极狐GitLab 15.7 中 GA。功能标志
webhooks_failed_callout
被移除。
要重新启用临时或永久禁用的 webhook:
- 发送测试请求到 webhook。
如果测试请求返回 2xx
范围内的响应代码,则 webhook 将被重新启用。
传递的标头
X-Gitlab-Event-UUID
标头引入于极狐GitLab 14.8。X-Gitlab-Instance
标头引入于极狐GitLab 15.5。X-Gitlab-Webhook-UUID
标头引入于极狐GitLab 16.2。Idempotency-Key
标头引入于极狐GitLab 17.4。
极狐GitLab 在 webhook 请求中包含如下标头:
标头 | 描述 | 示例 |
---|---|---|
User-Agent |
"Gitlab/<VERSION>" 格式的用户代理。 |
"GitLab/15.5.0-pre" |
X-Gitlab-Instance |
发送 webhook 的极狐GitLab 示例的主机名。 | "https://gitlab.com" |
X-Gitlab-Webhook-UUID |
每个 webhook 的唯一 ID。 | "02affd2d-2cba-4033-917d-ec22d5dc4b38" |
X-Gitlab-Event |
Webhook 类型名称。对应的事件类型格式为 "<EVENT> Hook" 。 |
"Push Hook" |
X-Gitlab-Event-UUID |
非递归 Webhook 的唯一标识符。递归 Webhook(由先前的 Webhook 触发的)共享相同的标识符值。 | "13792a34-cac6-4fda-95a8-c58e00a3954e" |
Idempotency-Key |
在 Webhook 重试过程中保持唯一 ID 一致。用于确保集成中的幂等性。 | "f5e5f430-f57b-4e6e-9fac-d9128cd7232f" |
webhook body 中图片 URL 的显示
极狐GitLab 重写 webhook body 中的相对图片引用为绝对 URL。
图片 URL 重写示例
如果合并请求、评论或 wiki 页面中的原始图片引用是:

在 webhook body 中的图片引用将被重写为:

此示例假定:
- 极狐GitLab 安装在
gitlab.example.com
上。 - 项目位于
example-group/example-project
中。
图片 URL 重写例外
当发生以下情况时,极狐GitLab 不会重写图片 URL:
- 它们已经使用 HTTP、HTTPS 或协议相对 URL。
- 它们使用高级 Markdown 功能,例如链接标签。