SVN服务端通过post-commit钩子调用企业微信机器人Webhook推送提交通知,需配置机器人权限、正确设置脚本路径与UTF-8环境、处理中文转义及频率限制,并验证网络连通性与日志完整性。

SVN服务端自动向企业微信发送代码提交通知,核心是利用 SVN 的 post-commit 钩子脚本,在每次提交完成时触发,提取提交信息并调用企业微信机器人 Webhook 接口推送消息。
准备企业微信机器人
在目标群聊中添加「群机器人」,复制其 Webhook 地址(形如 https://qyapi.weixin.qq.com/...&key=xxx),确保该机器人有发送文本权限。注意:Webhook 有调用频率限制(默认 20 次/分钟),高频率提交需加简单限流或合并消息。
配置 SVN post-commit 钩子脚本
进入 SVN 仓库的 hooks 目录,按以下步骤操作:
- 复制模板文件:
cp post-commit.tmpl post-commit - 赋予执行权限:
chmod +x post-commit - 编辑
post-commit,替换其中的WEBHOOK_URL为你的真实地址 - 确保
svnlook路径正确(常见为/usr/bin/svnlook或/usr/local/bin/svnlook) - 脚本中已设置 UTF-8 环境变量,避免中文乱码;日志内容经
sed转义后嵌入 JSON,适配企业微信接口要求
验证与调试要点
初次部署建议手动测试,避免影响团队协作:
- 临时在脚本末尾加
echo "$MESSAGE" >> /tmp/svn_test.log查看原始拼接内容 - 用
curl -X POST "$WEBHOOK_URL" -H 'Content-Type: application/json' -d '{"msgtype":"text","text":{"content":"test"}}'单独验证 Webhook 是否可用 - 检查
/svn/svn_post_commit.log(或你指定的日志路径)是否有 curl 错误,如Could not resolve host表示网络不通,403多为 Webhook 地址错误或已失效 - 提交时务必填写非空 log(否则
$LOGMSG为空,消息体不完整)
可选增强功能
基础版只发文本,如需更清晰的信息展示,可升级为 Markdown 格式:
- 将
"msgtype":"text"改为"msgtype":"markdown" - 把
"content"替换为"content": "### 提交详情\n> **作者**:$AUTHOR\n> **时间**:$(date -d "$DATE" '+%Y-%m-%d %H:%M')\n> **日志**:$LOGMSG" - 注意日期需用系统
date命令转换格式,因svnlook date输出含时区且非标准格式
不复杂但容易忽略。关键在于钩子权限、环境变量、Webhook 可达性三者齐备,就能稳定运行。



















