# GitLab 接入 Server酱：仓库事件与 CI 流水线微信通知（2026 教程）

> 通过 GitLab Webhook 或 .gitlab-ci.yml 调用 Server酱 API，将 push、MR 及流水线状态推送到微信。

- 网页版：https://sct.ftqq.com/docs/integrations/gitlab/
- 更新日期：2026-07-17

# GitLab + Server酱：仓库事件与 CI 流水线失败微信通知

> 效果：GitLab 仓库发生 push、Merge Request 或 CI 流水线失败时，微信立即收到通知。

## 前置条件

- Server酱 SendKey（[30 秒获取教程](https://sct.ftqq.com/docs/getting-started/sendkey/)）
- GitLab 仓库管理权限（配置 Webhook）或项目成员权限（修改 .gitlab-ci.yml）
- 消息可推送到微信、企业微信、钉钉群、飞书群等通道（[通道说明](https://sct.ftqq.com/docs/getting-started/channels/)）

## 配置步骤

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：

```yaml
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` 片段在流水线失败时推送通知，可直接复制使用：

```yaml
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 条（[价格详情](https://sct.ftqq.com/subscribe)）。

**消息没有收到怎么办？**

先检查 SendKey 是否正确、CI/CD 变量是否生效。更多排查步骤见[常见问题与排查](https://sct.ftqq.com/docs/getting-started/faq/)。

**推送频率有限制吗？**

每分钟最多 50 条请求，会员每日 API 请求上限 1000 条。CI 流水线频繁触发时注意控制通知频率。

**Webhook 方式能发送动态标题吗？**

不能。GitLab Webhook 只能 POST 固定格式 JSON，URL query 中的 `title` 为固定文案。需要动态内容请使用方式二（GitLab CI + curl）。

## 相关集成

- [Python 脚本接入 Server酱](https://sct.ftqq.com/docs/integrations/python/)
- [Uptime Kuma 宕机告警接入 Server酱](https://sct.ftqq.com/docs/integrations/uptime-kuma/)
- [青龙面板任务通知接入 Server酱](https://sct.ftqq.com/docs/integrations/qinglong/)


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

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

```text
请帮我把 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 条结果摘要即可，批量任务合并成一条，不要每步都推。
请根据我当前的项目和场景直接写好代码/配置并验证。
```

