GitLab CI 部署后发送通知的核心是在 deploy 或 after_script 阶段调用钉钉/企业微信 Webhook,通过 curl POST JSON 消息;需预先配置机器人、设置安全白名单、使用预定义变量填充内容,并将 Webhook URL 等敏感信息设为 masked 且 protected 变量。

GitLab CI 在部署后发送通知消息,核心思路是:在流水线的部署阶段(如 deploy 或 after_script)执行脚本,调用第三方消息服务(如钉钉、企业微信、飞书)的 Webhook 接口,把构建状态、项目名、环境、链接等关键信息以 JSON 格式 POST 出去。
准备钉钉/企业微信机器人
这是前提,否则后续无法发送:
- 在钉钉 PC 端群设置中添加「自定义机器人」,获取 Webhook URL(含
access_token);若启用加签,需额外计算timestamp和sign参数 - 企业微信同理,在群聊中添加「群机器人」,拿到
key,URL 形如https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=xxx - 建议配置 IP 白名单或关键词过滤,提升安全性;测试时先用 curl 手动发一条文本消息验证通路是否正常
在 .gitlab-ci.yml 中添加通知步骤
推荐放在部署作业末尾或全局 after_script,确保无论成功或失败都触发:
在 OpenClaw 中管理 GitHub 仓库、Pull Request、Issue 与工作流。适用于审查 PR、管理 Issue、自动化 GitHub Actions、同步仓库等场景。
- 使用
curl -X POST发送请求,注意 JSON 中双引号和变量需正确转义(GitLab CI 中建议用单引号包裹整个 JSON 字符串,内部用双引号) - 用 GitLab 预定义变量填充上下文,例如:
$CI_PROJECT_NAME、$CI_COMMIT_TAG、$CI_PIPELINE_URL、$CI_ENVIRONMENT_SLUG - 区分状态可借助
$CI_JOB_STATUS(值为success或failed),或用if: $CI_JOB_STATUS == "success"控制条件执行
构造带格式的消息体
纯文本简单,但推荐用富文本提升可读性:
- 钉钉支持
msgtype: "markdown",可加粗、换行、链接,例如:"content": "## ? 部署完成\n- 项目:$CI_PROJECT_NAME\n- 环境:$CI_ENVIRONMENT_SLUG\n- [查看详情]($CI_PIPELINE_URL)" - 企业微信支持
msgtype: "textcard"或"markdown",标题+摘要+跳转链接更直观 - 若需 @ 特定成员,钉钉填
atMobiles数组,企业微信用mentioned_mobile_list,注意手机号必须带区号且已实名绑定
处理敏感信息与权限
Webhook 地址含 token,绝不能硬编码在配置文件中:
- 在 GitLab 项目 Settings → CI/CD → Variables 中添加
DD_WEBHOOK_URL或WX_WEBHOOK_KEY,设为「masked」和「protected」 - 流水线仅对 protected 分支(如
main、release/*)运行时才暴露该变量,避免开发分支意外泄露 - 如需加签,可在脚本中用
date +%s%3N获取时间戳,再通过openssl计算 HmacSHA256 并 base64 编码(需镜像含 openssl)

















