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

如何在HipChat消息中添加触发Jenkins审批步骤的可操作元素?

在HipChat消息中添加可触发Jenkins操作的元素(含PROD审批实现)

我来帮你梳理下如何实现在HipChat里直接审批Jenkins的部署步骤,以及如何运用卡片功能——这确实是官方HipChat插件文档没覆盖太全的场景,不过有几种实用的方案:

一、用Jenkins HipChat插件原生支持的操作按钮

官方的HipChat插件其实支持在消息里添加可点击的操作按钮,只是需要用到attachments参数(而不是简单的message)来定义卡片式消息。这些按钮可以直接关联到Jenkins的API端点,触发审批动作。

示例代码:带审批按钮的HipChat消息

stage ('Approval for PROD') {
    // 给input步骤设置唯一ID,方便后续API调用定位
    def inputApprovalId = 'prod-deployment-approval'
    // 构建Jenkins审批的API链接
    def jenkinsApproveUrl = "${env.JENKINS_URL}/job/${env.JOB_NAME}/${env.BUILD_NUMBER}/input/${inputApprovalId}/submit?json=%7B%22parameter%22%3A+%5B%5D%7D&Submit=Proceed"
    def jenkinsRejectUrl = "${env.JENKINS_URL}/job/${env.JOB_NAME}/${env.BUILD_NUMBER}/input/${inputApprovalId}/submit?json=%7B%22parameter%22%3A+%5B%5D%7D&Submit=Abort"

    // 发送带操作按钮的HipChat卡片消息
    hipchatSend color: 'yellow', notify: true, room: "Jenkins Team FooBar", 
        attachments: """
        [{
            "title": "${env.JOB_NAME}#${env.BUILD_NUMBER} 等待PROD部署审批",
            "description": "请确认是否批准本次部署到PROD环境",
            "actions": [
                {
                    "name": "批准部署",
                    "style": "primary",
                    "url": "${jenkinsApproveUrl}"
                },
                {
                    "name": "拒绝部署",
                    "style": "danger",
                    "url": "${jenkinsRejectUrl}"
                }
            ]
        }]
        """, textFormat: false // 注意这里要设为false,因为attachments是JSON格式

    // 原有的input步骤逻辑保持不变
    try {
        timeout(time: approvalTime, unit: approvalTimeUnit) {
            input id: inputApprovalId, message: 'Do you approve the deployment to PROD?'
        }
    } catch (Exception ex) {
        finishBuild = true
    }
}

// Stop build if flag was set
if (finishBuild) return

二、通过POST请求实现更灵活的审批

如果原生按钮的功能不够满足需求(比如需要传递自定义参数、更安全的认证),你可以通过构建调用Jenkins API的POST请求来实现。关键在于:

  1. 获取对应input步骤的API提交端点(格式就是上面示例里的链接)
  2. 确保请求带有Jenkins的认证信息(比如服务账号的API Token)
  3. 在HipChat卡片的操作按钮中调用这个端点

优化版:带安全认证的审批链接

stage ('Approval for PROD') {
    def inputApprovalId = 'prod-deployment-approval'
    // 使用Jenkins服务账号的API Token(建议单独创建权限受限的服务账号)
    def jenkinsServiceToken = '<你的服务账号API Token>'
    
    // 把Token加入URL实现认证(也可以通过HTTP Header传递,更安全)
    def jenkinsApproveUrl = "${env.JENKINS_URL}/job/${env.JOB_NAME}/${env.BUILD_NUMBER}/input/${inputApprovalId}/submit?token=${jenkinsServiceToken}&Submit=Proceed"
    def jenkinsRejectUrl = "${env.JENKINS_URL}/job/${env.JOB_NAME}/${env.BUILD_NUMBER}/input/${inputApprovalId}/submit?token=${jenkinsServiceToken}&Submit=Abort"

    hipchatSend color: 'yellow', notify: true, room: "Jenkins Team FooBar", 
        attachments: """
        [{
            "title": "${env.JOB_NAME}#${env.BUILD_NUMBER} PROD部署审批",
            "description": "点击按钮完成审批,权限已通过服务账号验证",
            "actions": [
                {
                    "name": "批准",
                    "style": "primary",
                    "url": "${jenkinsApproveUrl}"
                },
                {
                    "name": "拒绝",
                    "style": "danger",
                    "url": "${jenkinsRejectUrl}"
                }
            ]
        }]
        """, textFormat: false

    try {
        timeout(time: approvalTime, unit: approvalTimeUnit) {
            input id: inputApprovalId, message: 'Do you approve the deployment to PROD?'
        }
    } catch (Exception ex) {
        finishBuild = true
    }
}

if (finishBuild) return

三、HipChat卡片功能的核心要点

HipChat的卡片(Attachments)是实现富交互消息的关键,你需要注意这些细节:

  • 卡片必须是JSON数组格式,每个元素是一个卡片对象
  • 支持title(标题)、description(描述)、actions(操作按钮)等字段
  • style字段可以设置按钮样式:primary(蓝色主按钮)、danger(红色危险按钮)
  • 确保textFormat设为false,否则插件会把JSON当成纯文本处理

注意事项

  • 权限控制:不要把高权限的Jenkins账号Token暴露给普通用户,建议创建仅拥有审批权限的服务账号
  • 安全风险:URL里传递Token虽然方便,但有泄露风险,更安全的方式是通过反向代理或者OAuth2认证来处理请求
  • 格式校验:HipChat对JSON格式要求严格,建议先在线校验JSON语法再加入代码

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 04:35:24