GitLab + Server酱:仓库事件与 CI 流水线失败微信通知
效果:GitLab 仓库发生 push、Merge Request 或 CI 流水线失败时,微信立即收到通知。
前置条件
- Server酱 SendKey(30 秒获取教程)
- GitLab 仓库管理权限(配置 Webhook)或项目成员权限(修改 .gitlab-ci.yml)
- 消息可推送到微信、企业微信、钉钉群、飞书群等通道(通道说明)
配置步骤
GitLab 接入 Server酱有两种方式,按需求选择。
方式一:Webhook 直连(固定文案通知)
适合只需知道"有事件发生"的场景。GitLab Webhook 会 POST 固定格式 JSON,利用 URL query 参数携带标题即可直连:
https://sctapi.ftqq.com/你的SENDKEY.send?title=GitLab有新事件
在 GitLab 仓库设置中找到 Webhook 配置入口(具体位置以应用内实际显示为准),将上述 URL 配置为 Webhook 地址,并选择需要监听的事件(具体操作请参考 GitLab 官方文档),保存即可。
此方式消息标题固定为 URL 中 title 参数的值,正文为 GitLab POST 的 JSON 原文。已实测 POST 固定 JSON 时 query 参数仍然生效。
方式二:GitLab CI 动态内容通知
适合需要在通知中包含分支名、提交信息、流水线状态等动态内容的场景。在 .gitlab-ci.yml 中添加通知 job,用 curl 调用 Server酱 API:
notify:
stage: .post
script:
- |
curl -s -X POST "https://sctapi.ftqq.com/$SERVERCHAN_SENDKEY.send" \
--data-urlencode "title=GitLab CI 通知" \
--data-urlencode "desp=流水线执行完成,请查看详情。"
rules:
- when: on_failure
将 SERVERCHAN_SENDKEY 添加为 GitLab 项目的 CI/CD 环境变量(具体添加方式请参考 GitLab 官方文档)。
如需在消息中携带分支名、提交信息等动态内容,可将 GitLab CI 预定义变量拼入 desp 参数(变量名以 GitLab 官方文档为准)。
完整示例
以下 .gitlab-ci.yml 片段在流水线失败时推送通知,可直接复制使用:
stages:
- build
- test
- notify
build:
stage: build
script:
- echo "building..."
test:
stage: test
script:
- echo "testing..."
notify-failure:
stage: notify
script:
- |
curl -s -X POST "https://sctapi.ftqq.com/$SERVERCHAN_SENDKEY.send" \
--data-urlencode "title=【失败】GitLab 流水线中断" \
--data-urlencode "desp=项目流水线执行失败,请及时处理。"
rules:
- when: on_failure
使用前在 GitLab 项目中添加 CI/CD 变量 SERVERCHAN_SENDKEY,值为你的 SendKey。
常见问题
免费额度是多少?
免费用户每天可发送 5 条消息,每分钟上限 50 条。订阅会员目前特价最低 3 元/月,一天最多可发 1000 条(价格详情)。
消息没有收到怎么办?
先检查 SendKey 是否正确、CI/CD 变量是否生效。更多排查步骤见常见问题与排查。
推送频率有限制吗?
每分钟最多 50 条请求,会员每日 API 请求上限 1000 条。CI 流水线频繁触发时注意控制通知频率。
Webhook 方式能发送动态标题吗?
不能。GitLab Webhook 只能 POST 固定格式 JSON,URL query 中的 title 为固定文案。需要动态内容请使用方式二(GitLab CI + curl)。