Argo CD + Server酱:应用同步状态推送到微信

效果:Argo CD 应用同步成功或失败时,自动推送消息到微信。

前置条件

  • Server酱 SendKey(30 秒获取教程
  • 已安装 argocd-notifications 组件
  • 对 argocd-notifications-cm ConfigMap 有编辑权限

配置步骤

1. 定义 webhook service

在 argocd-notifications-cm ConfigMap 中定义 webhook service,将 URL 指向 Server酱 API,方法为 POST,body 使用 form 格式传 title 和 desp(具体配置键名请参考 argocd-notifications 文档)。

如果你使用 Server酱³(SendKey 以 sctp 开头),URL 改为:

https://你的UID.push.ft07.com/send/你的SENDKEY.send

UID 是 sctp 与 t 之间的数字。

2. 定义消息模板

在同一个 ConfigMap 中添加消息模板,将应用名和同步状态拼入 title 和 desp(具体模板语法请参考 argocd-notifications 文档)。

3. 定义触发器

添加触发器,指定在同步成功或失败时发送通知(具体配置请参考 argocd-notifications 文档)。

4. 订阅应用

通过 ConfigMap 中的 subscriptions 全局订阅,或通过 Application annotation 订阅(具体方式请参考 argocd-notifications 文档)。

5. 应用配置

kubectl apply -f argocd-notifications-cm.yaml

应用配置后,根据 argocd-notifications 文档使配置生效。

完整示例

一个完整的 argocd-notifications-cm ConfigMap 需包含以下部分:

  • webhook 服务定义:指向 Server酱 的 URL(https://sctapi.ftqq.com/你的SENDKEY.send,Server酱³ 用户使用对应 URL),方法 POST,body 为 form 格式。
  • 消息模板:将应用名、同步状态等信息拼入 title 和 desp。
  • 触发器:指定在同步成功或失败等条件下发送通知。
  • 订阅:全局订阅或按应用订阅。

具体配置键名和语法请参考 argocd-notifications 官方文档,将上述 Server酱 的 URL 和参数填入即可。

常见问题

免费额度够用吗?

Server酱免费版每天 5 条,每分钟上限 50 条。GitOps 部署频率不高时通常够用;高频部署可考虑订阅会员目前特价最低 3 元/月,一天最多可发 1000 条(价格详情)。

配置后没收到消息?

先检查 argocd-notifications-controller 日志确认 webhook 是否被触发;再确认 SendKey 正确、API 返回 JSON 的 code 为 0。也可参考常见问题与排查

form body 中的特殊字符怎么处理?

body 使用 form 格式时,应用名通常符合 Kubernetes 命名规范(小写字母、数字、连字符),不会有问题。如 desp 中需包含换行等特殊字符,可改用 JSON body(Content-Type 设为 application/json,body 用 JSON 格式传 title/desp,换行用 \n\n)。

多个应用同时同步会超限吗?

Server酱每分钟最多 50 条消息。如果大量应用同时触发通知,可能超出限制。可考虑减少同时订阅的应用数量,避免超出频率限制。

相关集成

懒人方案:把这段话复制给你的 AI 助手

把下面这段文字原样粘贴给 Claude Code、Cursor 或任何 AI 编程助手,它就会替你完成 Server酱 的接入:

请帮我把 Server酱 微信通知接入到我当前的项目/工具中:
1. API:POST https://sctapi.ftqq.com/{SendKey}.send,参数 title(必填,不能含换行)、desp(正文,支持 Markdown,可选);成功时返回 JSON 的 code 为 0。
2. 如果我的 SendKey 以 sctp 开头,则改用 https://{uid}.push.ft07.com/send/{SendKey}.send,uid 是 SendKey 中 sctp 与 t 之间的数字。
3. SendKey 从环境变量 SERVERCHAN_SENDKEY 读取;如果没有,提醒我到 https://sct.ftqq.com 免费获取(每天 5 条额度)。
4. 安全要求:不要把 SendKey 硬编码进代码、不要打印到日志、不要提交到 git。
5. 频率约定:任务结束发 1 条结果摘要即可,批量任务合并成一条,不要每步都推。
请根据我当前的项目和场景直接写好代码/配置并验证。