You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

借助Generic Webhook Trigger,如何在Jenkins中读取Bitbucket的HTTP请求头?

如何在Jenkins的Generic Webhook插件中读取Bitbucket的X-Hub-Signature请求头

第一步:在Generic Webhook插件中配置请求头参数

在你已有的Generic Webhook配置界面里,找到「Request headers」区域(就在请求体配置模块附近),添加一条配置:

  • 参数名称:填X_Hub_Signature(Jenkins变量不允许包含连字符,用下划线替代)
  • 表达式:填X-Hub-Signature(完全匹配Bitbucket发送的请求头名称)

保存配置后,该请求头的值会被Jenkins捕获,你可以在任务中通过环境变量${X_Hub_Signature}直接引用。

第二步:验证签名(以Pipeline任务为例)

拿到签名后,需要用Bitbucket Webhook配置的密钥重新计算请求体的签名,与收到的X-Hub-Signature比对,确保请求来自合法的Bitbucket实例。

以下是Pipeline中的验证脚本示例:

pipeline {
    agent any
    stages {
        stage('Validate Webhook Signature') {
            steps {
                script {
                    // 获取收到的签名
                    def receivedSig = env.X_Hub_Signature
                    // 替换为你在Bitbucket Webhook中设置的密钥
                    def webhookSecret = 'your-bitbucket-webhook-secret'
                    // 获取Generic Webhook已读取的请求体(变量名要和你配置的一致)
                    def requestPayload = env.requestBody

                    // 计算HMAC SHA256签名(Bitbucket默认使用该算法)
                    def mac = javax.crypto.Mac.getInstance('HmacSHA256')
                    mac.init(new javax.crypto.spec.SecretKeySpec(webhookSecret.getBytes(), 'HmacSHA256'))
                    def computedHash = new BigInteger(1, mac.doFinal(requestPayload.getBytes())).toString(16).padLeft(64, '0')
                    def computedSig = "sha256=${computedHash}"

                    // 签名不匹配则终止任务
                    if (receivedSig != computedSig) {
                        error "Invalid signature: Expected ${computedSig}, got ${receivedSig}"
                    }
                }
            }
        }
        // 后续任务步骤...
    }
}

补充说明

  • 如果是自由风格任务,可添加「Execute system Groovy script」步骤,用上述核心逻辑完成验证
  • 确认Bitbucket的签名算法为SHA256(多数版本默认如此),若你的版本使用其他算法,替换代码中的HmacSHA256即可
  • 保证请求体的变量名与你在Generic Webhook中配置的一致,避免无法获取请求体内容

内容的提问来源于stack exchange,提问作者John_Bon

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.25 02:24:11