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

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

前置条件

  1. 一个 Server酱 SendKey。如果你还没有,请参考 30 秒获取 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。以下代码可直接复制使用

- 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 工作流示例,在测试失败时发送通知:

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酱 常见问题与排查页面,按照指引检查 SendKey 是否正确、通道是否配置、以及消息是否被过滤。同时,在 GitHub Actions 的日志中查看 curl 命令的执行结果和返回的 JSON 信息。

免费版有发送限制吗? Server酱 免费版每日可发送 5 条消息,每分钟上限 50 条。订阅会员目前特价最低 3 元/月,一天最多可发 1000 条(价格详情)。

可以推送到企业微信或钉钉群吗? 可以。Server酱 支持将消息推送到微信服务号、企业微信应用、钉钉群机器人、飞书群机器人以及 Server酱³ App。配置方法请参考 通道对比与配置指南

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

相关集成

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

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

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