在jenkins中无法用原生webhook插件直接实现多维状态阶梯看版,需通过插件推送结构化事件,再由外部服务(如flask+echarts或钉钉/企微卡片)消费并渲染;关键包括:一、增强事件维度(阶段名、环境、分支、耗时、错误码等);二、使用富文本卡片替代普通消息,实现分层时间轴展示;三、后端轻服务按job+build归集、补全阶段、存储聚合结果;四、前端复用钉钉/企微模板或低代码平台快速搭建看板;全程需统一traceid保障归集准确。

直接在 Jenkins 中用原生 Webhook 插件实现“多维状态阶梯看版”不现实——插件本身只负责发消息,不具备前端渲染、状态聚合、时间轴分层或可视化看板能力。真正可行的路径是:用插件稳定推送结构化构建事件,再由外部轻量服务(如 Python Flask + ECharts)或低代码平台(如飞书多维表格、企微/钉钉自有卡片模板)消费这些事件,生成带维度分层的动态看版。
一、先确保 Webhook 事件数据够“多维”
默认通知只含成功/失败二值状态。要支撑阶梯式看版(比如:触发源→编译→镜像构建→单元测试→集成测试→部署→安全扫描),必须让每次通知携带完整上下文:
-
显式标注阶段名称:在 pipeline 的每个 stage 后调用通知,用
stageName: '单元测试'明确标识,别只在 post 块里统发一次 - 注入可分类字段:环境(dev/staging/prod)、服务名(backend/frontend)、Git 分支、Commit ID、耗时(ms)、关键指标(如 testPassRate=98.2%)都作为 payload 字段传出去
-
统一错误码体系:失败时不只发 “构建失败”,而是返回
errorCode: 'TEST_FAILED'或'IMAGE_PUSH_TIMEOUT',方便后端按类型聚合
二、钉钉/企微侧用「富文本卡片」替代普通消息
普通文本消息无法承载多维状态。必须启用卡片消息(钉钉支持 feedCard / actionCard;企微支持 template_card),才能做出分层效果:
- 顶部用大号字体标当前整体状态(✅ 成功 / ⚠️ 部分失败 / ❌ 中断),背景色区分
- 中间以时间轴形式横向罗列各阶段:「代码拉取 → 编译 → 单元测试 → 镜像构建 → 推送仓库 → 部署K8s」,每阶段用圆点+颜色(绿/黄/红)+耗时标注
- 底部折叠「详情」按钮,点击展开原始日志链接、Sonar 报告地址、镜像仓库地址等
注意:钉钉卡片需在插件配置中开启「使用卡片消息」开关;企微则必须用 qyWechatNotification 的 card 模式,并传入符合企业微信 schema 的 JSON。
三、后端轻服务做“阶梯聚合”逻辑
Jenkins 不处理聚合,这部分交给一个独立服务(哪怕只跑在 Jenkins 本机的 Python 脚本):
- 监听 Webhook 请求(例如接收所有
/dingtalk/webhook入口) - 按
jobName + buildNumber归集同一构建的多次阶段通知 - 识别阶段依赖顺序(比如“部署”必须在“镜像构建”之后),自动补全缺失环节为「未执行」
- 将最终聚合结果存入 SQLite 或 Redis,并提供 HTTP API(如
/api/build/status?job=frontend&build=142)供看板前端调用
四、前端看板用现成工具快速搭建
不用从零写页面。推荐两种低成本方式:
- 钉钉/企微内置卡片模板:在钉钉开放平台或企微管理后台,新建「自定义机器人」时选择「卡片消息模板」,绑定你上面写的聚合 API,设置定时刷新(如每30秒拉一次最新状态),即可在群内常驻一个可交互看板
- 低代码仪表盘:把聚合 API 接入飞书多维表格、简道云或腾讯云微搭,用「状态流转图」组件展示阶段阶梯,用「数字看板」显示成功率趋势,权限可控、无需运维
不复杂但容易忽略的是:所有环节必须带唯一 traceId,否则跨阶段归集会错乱。建议在 pipeline 开头就生成 env.TRACE_ID = UUID.randomUUID().toString(),并透传到每个通知和日志中。











