Help us learn about your current experience with the documentation. Take the survey.

Webhook 故障排除

  • Tier: Free, Premium, Ultimate
  • Offering: GitLab.com, GitLab Self-Managed, GitLab Dedicated

排查并解决 GitLab webhook 的常见问题。

调试 webhook

使用以下方法调试 GitLab webhook 并捕获 payload:

有关 webhook 事件和 JSON payload 的信息,请参阅 webhook 事件

使用公共 webhook 检查工具

使用公共工具来检查和测试 webhook payload。 这些工具为 HTTP 请求提供通用端点,并以 200 OK 状态码响应。

使用公共工具时要谨慎,因为你可能会将敏感数据发送到外部服务。 使用测试令牌,并轮换任何意外发送给第三方的密钥。 为了增强隐私性,创建私有 webhook 接收器

公共 webhook 检查工具包括:

  • Beeceptor:创建临时 HTTPS 端点并检查传入的 payload。

使用 GitLab 开发套件 (GDK)

为了更安全的开发环境,使用 GitLab 开发套件 (GDK) 在本地处理 GitLab webhook。 使用 GDK 将 webhook 从本地 GitLab 实例发送到你机器上的 webhook 接收器。

要使用此方法,请安装和配置 GDK。

创建私有 webhook 接收器

如果你无法将 webhook payload 发送到 公共接收器,请创建自己的私有 webhook 接收器。

先决条件:

  • 系统上已安装 Ruby。

创建私有 webhook 接收器:

  1. 将此脚本保存为 print_http_body.rb

    require 'webrick'
    
    server = WEBrick::HTTPServer.new(:Port => ARGV.first)
    server.mount_proc '/' do |req, res|
      puts req.body
    end
    
    trap 'INT' do
      server.shutdown
    end
    server.start
  2. 选择一个未使用的端口(例如 8000)并启动脚本:

    ruby print_http_body.rb 8000
  3. 在 GitLab 中,使用接收器的 URL 配置 webhook(例如 http://receiver.example.com:8000/)。

  4. 选择 测试。你应该看到类似以下的输出:

    {"before":"077a85dd266e6f3573ef7e9ef8ce3343ad659c4e","after":"95cd4a99e93bc4bbabacfa2cd10e6725b1403c60",<SNIP>}
    example.com - - [14/May/2014:07:45:26 EDT] "POST / HTTP/1.1" 200 0
    - -> /

要添加此接收器,你可能需要 允许本地网络请求

解决 SSL 证书验证错误

启用 SSL 验证时,GitLab 可能无法验证 webhook 端点的 SSL 证书,并出现以下错误:

unable to get local issuer certificate

当根证书不是由 CAcert.org 确定的受信任证书颁发机构颁发时,通常会发生此错误。

要解决此问题:

  1. 使用 SSL 检查器 识别具体错误。
  2. 检查缺失的中间证书,这是验证失败的常见原因。

Webhook 未触发

如果 webhook 未触发,请验证以下内容: