# GitHub Actions 接入 Server酱：CI 构建/部署状态微信通知（2026 教程）

> 在 GitHub Actions CI/CD 流水线失败或成功时，通过 Server酱 将通知发送到微信。配置简单，只需一个 Secret 和一行 curl 命令。

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

# GitHub Actions + Server酱：CI 状态实时推送

> 效果：当 GitHub Actions 工作流运行失败（或成功）时，你的微信会立即收到包含仓库、分支、提交和运行详情的通知。

## 前置条件

1.  一个 Server酱 SendKey。如果你还没有，请参考 [30 秒获取 SendKey 教程](https://sct.ftqq.com/docs/getting-started/sendkey/)。
2.  一个拥有 GitHub 仓库的 GitHub 账号，并具备配置仓库 Secrets 的权限。

## 配置步骤

### 第一步：在 GitHub 仓库中添加 SendKey

1.  进入你的 GitHub 仓库页面。
2.  点击顶部菜单的 **Settings**。
3.  在左侧边栏找到 **Secrets and variables**，点击 **Actions**。
4.  点击 **New repository secret** 按钮。
5.  在 **Name** 输入框中填写 `SERVERCHAN_SENDKEY`。
6.  在 **Value** 输入框中粘贴你从 Server酱 官网获取的 SendKey。
7.  点击 **Add secret** 保存。

### 第二步：在 Workflow 文件中添加通知步骤

在你的 GitHub Actions 工作流文件 (`.github/workflows/*.yml`) 中，添加一个发送通知的 step。**以下代码可直接复制使用**：

```yaml
- name: 发送 Server酱 通知
  if: failure() # 仅在之前的步骤失败时运行
  run: |
    curl -sS -X POST "https://sctapi.ftqq.com/${{ secrets.SERVERCHAN_SENDKEY }}.send" \
      -d "title=构建失败 ${{ github.repository }}" \
      -d "desp=分支 ${{ github.ref_name }}，提交 ${{ github.sha }}，详情 ${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }}"
```

将这段代码放在工作流的 `jobs.<job_id>.steps` 部分，通常放在所有核心构建/部署步骤之后。

## 完整示例

以下是一个简单的 Node.js 项目 CI 工作流示例，在测试失败时发送通知：

```yaml
name: CI

on: [push]

jobs:
  build:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - name: 安装依赖
        run: npm ci
      - name: 运行测试
        run: npm test

      # Server酱 通知步骤
      - name: 发送构建失败通知
        if: failure()
        run: |
          curl -sS -X POST "https://sctapi.ftqq.com/${{ secrets.SERVERCHAN_SENDKEY }}.send" \
            -d "title=CI 失败 ${{ github.repository }}" \
            -d "desp=分支 ${{ github.ref_name }}，提交 ${{ github.sha }}，详情 ${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }}"
```

## 常见问题

**如何修改通知触发的时机？**
修改通知步骤中的 `if` 条件。`if: failure()` 表示仅当之前步骤失败时运行；`if: success()` 表示仅当之前步骤成功时运行；`if: always()` 表示无论成功失败都运行。不写 `if` 条件则默认仅在前序步骤成功时运行。

**消息没收到怎么办？**
请首先访问 [Server酱 常见问题与排查页面](https://sct.ftqq.com/docs/getting-started/faq/)，按照指引检查 SendKey 是否正确、通道是否配置、以及消息是否被过滤。同时，在 GitHub Actions 的日志中查看 curl 命令的执行结果和返回的 JSON 信息。

**免费版有发送限制吗？**
Server酱 免费版每日可发送 5 条消息，每分钟上限 50 条。订阅会员目前特价最低 3 元/月，一天最多可发 1000 条（[价格详情](https://sct.ftqq.com/subscribe)）。

**可以推送到企业微信或钉钉群吗？**
可以。Server酱 支持将消息推送到微信服务号、企业微信应用、钉钉群机器人、飞书群机器人以及 Server酱³ App。配置方法请参考 [通道对比与配置指南](https://sct.ftqq.com/docs/getting-started/channels/)。

**如何自定义通知标题和内容？**
修改 curl 命令中的 `title` 和 `desp` 参数即可。`desp` 支持 Markdown 格式。你可以利用 GitHub Actions 提供的丰富上下文变量（如 `github.actor` 触发者）来丰富消息内容。

## 相关集成

*   [Python 脚本推送](https://sct.ftqq.com/docs/integrations/python/) - 在本地脚本或服务器任务中集成推送。
*   [Uptime Kuma 宕机告警](https://sct.ftqq.com/docs/integrations/uptime-kuma/) - 监控网站状态，宕机时即刻通知。
*   [青龙面板任务通知](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 条结果摘要即可，批量任务合并成一条，不要每步都推。
请根据我当前的项目和场景直接写好代码/配置并验证。
```

