Files
devops-platform-web/docs/notification-platform-config.md
湛兮 366f1d667e feat: 接入真实平台登录态
- login/session: 对接后端登录、鉴权恢复和首次改密
- api/store: 恢复 BPMN XML 真实接口并携带 Bearer token
- layout/settings: 展示真实角色、审计 JSON 和通知平台配置文档
2026-06-12 00:38:31 +08:00

170 lines
6.2 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# DevOps 通知平台配置方案
更新时间:2026-06-11
## 当前结论
通知平台不是前端能力,web 端只展示后端返回的配置状态、变量名和变量说明。真实 webhook、token、签名密钥只能存在于 `devops-platform-api` 的服务端环境变量、服务器 secret 或后续加密存储中。
当前后端通知 provider 已按以下变量预留:
| Provider | 适用平台 | 必需变量 | Webhook 变量 | 当前策略 |
| --- | --- | --- | --- | --- |
| `wecom` | 企业微信 | `NOTIFICATION_PROVIDER=wecom` | `WECOM_WEBHOOK_URL` | 发送 markdown 发布通知 |
| `feishu` | 飞书 | `NOTIFICATION_PROVIDER=feishu` | `FEISHU_WEBHOOK_URL` | 发送 text 发布通知 |
| `generic` | 内部通知网关 | `NOTIFICATION_PROVIDER=generic` | `NOTIFICATION_WEBHOOK_URL` | 发送结构化 JSON |
未配置 provider 或 webhook 时,发布流程不应被阻断;通知节点应显示 skipped/failed,并把脱敏摘要写入审计日志。
## 后端环境变量
```env
DEVOPS_PUBLIC_URL=https://devops.mrzhan.top
# 任选其一:wecom / feishu / generic
NOTIFICATION_PROVIDER=wecom
# 企业微信机器人
WECOM_WEBHOOK_URL=https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=replace-with-real-key
# 飞书自定义机器人
FEISHU_WEBHOOK_URL=https://open.feishu.cn/open-apis/bot/v2/hook/replace-with-real-token
# 通用内部 webhook
NOTIFICATION_WEBHOOK_URL=https://notification.example.internal/webhook/replace-with-secret
```
安全要求:
| 要求 | 说明 |
| --- | --- |
| 不进前端 | web 端只拿变量名、状态和说明,不接收真实 URL |
| 不进 Git | `.env`、服务器 secret、后续 `secrets` 表均不得提交真实 webhook |
| 日志脱敏 | 任何异常日志、审计摘要和 Agent 上下文都不能包含 webhook 原文 |
| 不阻断发布 | 通知失败只影响通知节点和审计,不回滚 Jenkins 构建结果 |
## 企业微信配置
参考文档:
- 企业微信开发者文档:`https://developer.work.weixin.qq.com/document/path/91770`
- 腾讯云消息中心企业微信机器人接收消息:`https://cloud.tencent.com/document/product/1263/71731`
1. 在企业微信群中添加群机器人。
2. 复制机器人 webhook,保存到服务端环境变量 `WECOM_WEBHOOK_URL`
3. 设置 `NOTIFICATION_PROVIDER=wecom`
4. 重启 `devops-platform-api`
5. 访问 `/settings`,确认“通知平台”从未配置变成已配置或部分配置。
6. 创建一次测试发布单,检查流程中的通知节点和群内消息。
本地验证命令:
```bash
curl -X POST "$WECOM_WEBHOOK_URL" \
-H 'Content-Type: application/json' \
-d '{"msgtype":"markdown","markdown":{"content":"# DevOps 通知测试\n\n> 项目:devops-platform-web\n> 环境:production\n> 状态:success"}}'
```
## 飞书配置
官方参考:`https://open.feishu.cn/document/client-docs/bot-v3/add-custom-bot`
1. 在飞书目标群添加“自定义机器人”。
2. 复制 webhook,保存到服务端环境变量 `FEISHU_WEBHOOK_URL`
3. 建议开启安全设置:关键词、IP 白名单或签名校验。
4. 设置 `NOTIFICATION_PROVIDER=feishu`
5. 重启 `devops-platform-api`
6. 创建测试发布单,检查通知节点和飞书群消息。
基础 text 消息验证:
```bash
curl -X POST "$FEISHU_WEBHOOK_URL" \
-H 'Content-Type: application/json' \
-d '{"msg_type":"text","content":{"text":"DevOps 通知测试:devops-platform-web production success"}}'
```
如果开启飞书签名校验,需要后端按飞书规则计算 timestamp/sign,再放入请求 body;不要在前端计算或保存签名密钥。
## 通用 webhook 配置
适合接内部通知网关或消息中转服务:
```env
NOTIFICATION_PROVIDER=generic
NOTIFICATION_WEBHOOK_URL=https://notification.example.internal/webhook/replace-with-secret
```
建议后端投递结构:
```json
{
"event": "deploy.succeeded",
"title": "DevOps 发布成功",
"run": {
"id": "run_xxx",
"projectKey": "devops-platform-web",
"environment": "production",
"ref": "master",
"status": "success",
"operator": "ops-admin"
},
"publicUrl": "https://devops.mrzhan.top"
}
```
## Settings 变量说明契约
`/settings` 页面已按后端返回字段展示 hover 说明。后端推荐在 `GET /settings/integration-config` 中为每个变量补充 `variableHelp`
```json
{
"key": "notification",
"name": "通知平台",
"status": "partial",
"required": ["NOTIFICATION_PROVIDER", "WECOM_WEBHOOK_URL"],
"configured": ["NOTIFICATION_PROVIDER"],
"missing": ["WECOM_WEBHOOK_URL"],
"optional": ["FEISHU_WEBHOOK_URL", "NOTIFICATION_WEBHOOK_URL", "DEVOPS_PUBLIC_URL"],
"variableHelp": {
"NOTIFICATION_PROVIDER": {
"description": "通知 provider,可选 wecom、feishu、generic。",
"example": "wecom",
"docUrl": "https://developer.work.weixin.qq.com/document/path/91770"
},
"WECOM_WEBHOOK_URL": {
"description": "企业微信群机器人的服务端 webhook,只能保存在后端。",
"docUrl": "https://developer.work.weixin.qq.com/document/path/91770"
},
"FEISHU_WEBHOOK_URL": {
"description": "飞书自定义机器人的服务端 webhook,只能保存在后端。",
"docUrl": "https://open.feishu.cn/document/client-docs/bot-v3/add-custom-bot"
},
"NOTIFICATION_WEBHOOK_URL": {
"description": "内部通知网关或通用 webhook 的服务端地址。"
},
"DEVOPS_PUBLIC_URL": {
"description": "通知消息里跳转回 DevOps 平台的公开访问地址。"
}
}
}
```
前端兼容字段:
| 字段 | 说明 |
| --- | --- |
| `variableHelp` | 推荐格式,支持 description、example、docUrl |
| `variableDescriptions` | 兼容 `变量名 -> 说明字符串` 的简单格式 |
| `variables[]` | 兼容 `{ name, description, example, docUrl }` 数组格式 |
## 上线检查
| 检查项 | 通过标准 |
| --- | --- |
| `/settings` | 只展示变量名、配置状态和后端说明,不展示真实 webhook |
| 发布流程 | 通知未配置时节点 skipped,不阻断成功发布 |
| 审计日志 | 记录通知投递结果,摘要已脱敏 |
| Agent | 只能解释通知 skipped/failed,不输出或猜测 webhook |
| 服务器 | 真实 webhook 仅在 `.env`、secret manager 或加密存储中存在 |