Claude Code 在 CI 裏跑:從本機 claude -p 到 GitHub Actions 的完整例子(自動審 PR、控成本)

一條線走完 Claude Code 的 CI 用法:先在本機用 claude --bare -p 配 --json-schema 跑通,再寫進 GitHub Actions 用 claude-code-action@v1 自動審 PR,最後加上 --max-turns、超時、並發限制來控成本,並附上常見故障的排查順序。

NNathaniel bigo··原創首發·AI 輔助撰寫
10 分鐘讀完
資料核對於 2026-11-05 · 依據官方文檔與公開資料整理 Plus 帳號
本文根據 Claude Code 官方《Claude Code GitHub Actions》和《Run Claude Code programmatically》整理,資料核對於 2026-11-05。配圖為本站整理的示意圖,不是介面截圖。工作流裏的提示詞和參數組合是本站自己擬的示例。本站(bigolab.com)不是 Anthropic 官方網站。

適用於誰

結論先說

  1. 先本機,後 CI:同一段提示詞、同樣的 --allowedTools,在本機用 claude -p 跑通再搬到工作流裏,排錯成本最低。
  2. CI 裏用 --bare:官方說它能讓每台機器得到一致的結果,不會讀到別人 ~/.claude 裏的 hook 或項目 .mcp.json 裏的伺服器;它不讀訂閱登入,要設定 ANTHROPIC_API_KEY。
  3. GitHub Actions 裏有 prompt 就是自動化模式:不等 @claude 評論,直接按觸發事件運行;預設結果只寫在工作流日誌裏。
  4. 權限要顯式給:官方寫明自動化模式下,普通文本提示詞沒有 shell 和 GitHub API 權限,除非用 --allowedTools 或 permissions.allow 授予。
  5. 成本靠三道閘:--max-turns、工作流超時、並發限制,加上一份簡短的 CLAUDE.md。

在 CI 裏跑 Claude Code 的五步

圖:本站根據 Claude Code 官方《Claude Code GitHub Actions》 整理的示意圖

一、第一步:本機用 claude -p 跑通

假設要做的事是「審查當前分支相對 main 的改動,只報嚴重問題」。官方有現成的管道寫法:把 diff 通過標準輸入交給 Claude,它就不需要 Bash 權限去讀 diff。先試一個最樸素的版本:

bash
git diff main...HEAD | claude --bare -p "你是代碼審查員。只指出會導致 bug 或安全問題的改動,每條一行:文件名:行號 問題。沒有問題就只回復 OK。"

要讓腳本能判斷結果,用官方的 --output-format json 加 --json-schema,結構化結果在 structured_output 字段裏:

bash
git diff main...HEAD | claude --bare -p "審查這份 diff,列出嚴重問題" \
  --output-format json \
  --json-schema '{"type":"object","properties":{"issues":{"type":"array","items":{"type":"string"}}},"required":["issues"]}' \
  | jq '.structured_output.issues'

兩個官方提醒要放進腳本:

  • 如果運行結束時沒有有效的結構化輸出(比如 Claude 拒絕了請求),響應裏沒有 structured_output 字段,所以腳本里要先判斷字段存在,再使用;
  • 退出碼:成功是 0,失敗是非 0。不過官方也說,運行過程中的失敗(比如缺少認證)會把失敗資訊作為結果打印到標準輸出,所以不要只看退出碼。

輸入有 10MB 的上限:超過會報錯退出,大改動要先寫到文件再在提示詞裏引用路徑。

先在本機確認輸出符合預期,再往下走。可以在 claude -p 的結果裏看到 total_cost_usd(官方說這是客戶端估算,可能與帳單有出入),用來估一個 PR 大概花多少。

二、第二步:把審查標準寫進 CLAUDE.md

CI 裏每次運行都會讀倉庫裏的 CLAUDE.md(不加 --bare 時;GitHub Action 按官方最佳實踐頁的說法同樣會遵循它)。把審查口徑寫進去,比每次改工作流裏的提示詞方便:

markdown
## 代碼審查
- 只關注:會導致運行錯誤、數據丟失、越權或密鑰泄露的改動
- 不要評論代碼風格,格式問題由 lint 負責
- 每條意見寫明文件名和行號

官方提醒要保持精簡,因為它每次運行都會被讀入。寫法參考 /guides/claude-code-claude-md-templates-frontend-backend-data。

三、第三步:配置密鑰與應用

官方推薦的快速路徑:在倉庫裏打開 claude,運行 /install-github-app,它會安裝 Claude GitHub App、儲存倉庫密鑰,並推一個帶工作流文件的分支、幫你打開創建 PR 的頁面。這條命令只對 github.com 倉庫有效,需要你有倉庫管理員權限,並先安裝、登入 GitHub CLI(gh auth login)。

手動配置時:安裝 Claude GitHub App;在倉庫 Secrets 中添加 ANTHROPIC_API_KEY(Claude Console 的 API Key),或者訂閱用戶用 claude setup-token 生成令牌存為 CLAUDE_CODE_OAUTH_TOKEN。官方特別寫了:永遠不要把 Key 提交進倉庫,只放 Secrets。多個倉庫共享時,官方建議用 API Key 而不是 OAuth 令牌,因為令牌綁定的是運行 setup-token 那個人的訂閱。訂閱和 API 的取捨見 /guides/claude-code-pro-max-or-api。

四、第四步:寫自動審查的工作流

下面的觸發事件、權限塊和 action 版本取自官方示例的寫法,prompt 和 claude_args 是本站按官方說明拼的:

yaml
name: Claude PR Review
on:
  pull_request:
    types: [opened, synchronize, ready_for_review, reopened]

concurrency:
  group: claude-review-${{ github.event.pull_request.number }}
  cancel-in-progress: true

jobs:
  review:
    if: github.event.pull_request.draft == false
    runs-on: ubuntu-latest
    timeout-minutes: 15
    permissions:
      contents: read
      pull-requests: read
      issues: read
      id-token: write
    steps:
      - uses: actions/checkout@v6
        with:
          fetch-depth: 0
      - uses: anthropics/claude-code-action@v1
        with:
          anthropic_api_key: ${{ secrets.ANTHROPIC_API_KEY }}
          prompt: |
            審查本 PR 相對 ${{ github.base_ref }} 的改動,只報嚴重問題,按 CLAUDE.md 的「代碼審查」要求。
            用 git diff 查看改動,輸出文件名:行號和問題;沒有問題就寫 OK。
          claude_args: |
            --max-turns 8
            --allowedTools "Read,Grep,Glob,Bash(git diff *),Bash(git log *)"

逐段說明:

  • on.pull_request.types:官方審查示例用的同一組事件;
  • concurrency 與 cancel-in-progress:同一個 PR 連續推送時取消舊的運行,對應官方成本建議裏的「使用 GitHub 並發控制限制並行運行」;
  • timeout-minutes:對應「設定工作流級超時避免跑飛」;
  • id-token: write:官方說明這是 action 預設使用 GitHub App 認證所需;
  • prompt 一旦存在,就是自動化模式,不再等待 @claude;
  • --max-turns 8:官方 claude_args 的常見參數,限制回合數;
  • --allowedTools:自動化模式下授予 shell 與讀取權限,Bash(git diff *) 的寫法是官方的前綴匹配語法;
  • fetch-depth: 0:本站補充,為了能比較 base 分支,官方示例用的是 1,如果你只需要看改動文件的內容可以保留 1。

結果去哪裏看:官方寫明,自動化模式預設結果出現在工作流運行日誌裏。若希望審查意見直接成為 PR 上的評論,官方的現成做法是安裝 code-review 插件並帶 --comment(官方「Run a skill」一節),以及在 claude_args 裏允許 mcp__github_inline_comment__create_inline_comment。官方還說明:公開倉庫裏來自 fork 的 PR 拿不到 Secrets,所以審查只對同倉庫分支的 PR 生效。

五、同一個倉庫再加「@claude 隨叫隨到」

自動審查之外,官方最基本的工作流是讓評論裏的 @claude 觸發(交互模式,不寫 prompt):

yaml
name: Claude Code
on:
  issue_comment:
    types: [created]
  pull_request_review_comment:
    types: [created]
jobs:
  claude:
    if: contains(github.event.comment.body, '@claude')
    runs-on: ubuntu-latest
    permissions:
      contents: write
      pull-requests: write
      issues: write
      id-token: write
      actions: read
    steps:
      - uses: actions/checkout@v6
        with:
          fetch-depth: 1
      - uses: anthropics/claude-code-action@v1
        with:
          anthropic_api_key: ${{ secrets.ANTHROPIC_API_KEY }}

官方指出觸發者必須有倉庫寫權限,機器人帳號預設會被拒絕,以防循環觸發。

六、出問題先看哪裏

CI 排查順序

圖:本站根據 Claude Code 官方《Claude Code GitHub Actions》 整理的示意圖

官方排查頁的要點:評論 @claude 沒反應,檢查 GitHub App 是否安裝、工作流是否啟用、Secrets 是否設定、評論裏是否是完整的 @claude 單詞、評論者是否有寫權限;Claude 推送的提交沒觸發 CI,是因為用預設 GITHUB_TOKEN 提交的代碼不會觸發工作流,去掉傳給 action 的 github_token;認證失敗,先在本機用同一個 Key 或令牌運行 claude 驗證。

常見問題

Q:一次審查大概花多少錢?

官方不給固定數字,只說取決於提示詞和回覆長度、任務複雜度、代碼庫大小,價格以官方定價頁為準。可以用本機 JSON 輸出裏的 total_cost_usd 做估算。

Q:用訂閱還是 API?

訂閱令牌適合個人倉庫,團隊共享用 API Key,詳見第三節。想了解訂閱方案可看 Claude Code 訂閱方案。

相關教學

參考資料

  • Claude Code 官方:Claude Code GitHub Actions — https://code.claude.com/docs/en/github-actions
  • Claude Code 官方:Run Claude Code programmatically — https://code.claude.com/docs/en/headless

Nathaniel 的更多內容

  1. 01

    Claude Personal Finance 是什麼:連銀行帳戶問花銷、怎麼開、只讀權限、誰能用、怎麼解除

    Claude 的 Personal Finance(beta)通過 Plaid 只讀連接你的銀行、信用卡、貸款和投資帳戶,在一頁裏看餘額和花銷並用自然語言提問。本文按官方幫助頁講誰能用(僅美國、Pro/Max/Ultra)、連接與解除步驟、Claude 能看什麼,以及它做不到的事。

    Claude0
  2. 02

    Claude Code 離開一小時回來對話被「壓縮」了:Idle compaction 是什麼、條件、怎麼關

    Claude Code 的 idle compaction 會在你離開約一小時後,把 200K token 以上的長對話先壓縮成摘要,下一條消息就不用重新處理整段歷史。本文按官方文檔講觸發條件、看到什麼提示、用 /config 或 idleCompaction 關閉、調閾值,以及恢復舊對話的用量警告。

    Claude0
  3. 03

    ChatGPT Computer History 是什麼:Mac 桌面端的活動記憶怎麼開、怎麼暫停和清除、誰能用

    Computer History 是 ChatGPT macOS 桌面應用裏預設關閉的可選功能,把你在應用和網站裏的活動整理成記憶和時間線,供 ChatGPT 與 Codex 引用。本文按官方文檔講怎麼開、記錄什麼不記錄什麼、怎麼暫停與清除、數據存哪、誰能用,以及提示注入風險。

    ChatGPTCodex0
  4. 04

    Codex 輸入框出現灰色建議:Composer predictions 是什麼、Tab 接受、怎麼關、誰能用

    Codex 桌面 App 的 Composer predictions(beta)會在 Codex 回完後,根據當前對話在輸入框裏給出下一條消息的建議,按 Tab 接受、不會自動發送。本文按官方幫助頁講誰能用、哪些線程支持、怎麼關、算不算額度,以及沒出現時怎麼查。

    ChatGPTCodex0
  5. 05

    ChatGPT 私隱中心(Privacy Center)在哪裏:私隱設定入口、三大分類和哪些套餐有

    ChatGPT 的 Privacy Center 把記憶、廣告、位置、臨時對話、鎖定對話、兩步驗證、模型改進、數據導出和刪號等入口集中到一頁。本文按官方幫助頁講怎麼打開、三大分類各有什麼、哪些套餐有,以及它不會替你改任何設定。

    ChatGPT0
  6. 06

    Claude Code 處理大倉庫:怎麼讓它只看需要的目錄(子目錄 CLAUDE.md、claudeMdExcludes、deny 規則)

    倉庫太大,Claude Code 總在讀無關文件、讀進別的包的規則?本文按官方大倉庫指南講:從哪個目錄啟動、子目錄 CLAUDE.md、claudeMdExcludes、Read 的 deny 規則、worktree.sparsePaths、additionalDirectories,以及一份合併後的配置示例。

    Claude0

同產品的其他教學

  1. 01

    Claude Code 自定義 subagent 實例:測試員、調試員、只讀調研員、只讀數據庫員怎麼寫

    四個可直接改的 subagent 實例:跑測試的 test-runner、找根因的 debugger、只讀調研員、用 PreToolUse hook 限成只讀 SQL 的 db-reader;講 tools、disallowedTools、model、maxTurns 怎麼配,怎麼點名調用。

    Claude0
  2. 02

    Claude Code 的 CLAUDE.md 模板:前端、後端、數據分析各一份,附拆分與自檢方法

    直接拿去改的三份 CLAUDE.md 模板(前端、後端、數據分析),每份都控制在官方建議的 200 行以內;再講怎麼用 .claude/rules 的 paths 拆出專屬規則、用 @ 導入長文檔,以及用 /context all 和 /doctor prompt-audit 檢查是否生效。

    Claude0
  3. 03

    Claude Code 自己寫一個插件並發布到 marketplace:plugin.json、marketplace.json、validate 到團隊安裝的完整流程

    想把自己寫的 Skill、Hook 打包給團隊用?按 Claude Code 官方 Plugins 文檔,從目錄結構、plugin.json、claude plugin validate,到寫 marketplace.json、推到 Git、讓同事一條命令安裝,再到版本更新,走完一遍完整流程。

    Claude0
  4. 04

    Claude Code 寫一個會自動觸發的 Skill:從需求到觸發,用 description、when_to_use 和 paths 控制它什麼時候出場

    寫好的 Skill 總是不觸發,或者什麼都觸發?本文按 Claude Code 官方「Extend Claude with skills」走一遍完整實例:把「改數據庫遷移前先檢查」寫成一個會自動出場的 Skill,包含 description、when_to_use、paths、附帶腳本、觸發測試和評估。

    Claude0
  5. 05

    Claude Code 配 Sentry MCP 排查線上報錯:添加命令、瀏覽器授權、貼 issue 連結修 bug 和插件子智能體

    線上報錯只能手動複製堆棧給 Claude Code?Sentry 官方提供 MCP 服務,可以讓它直接讀 issue、堆棧和 trace。本文按 Claude Code 官方 MCP 文檔和 Sentry MCP 官方說明,講添加命令、/mcp 授權、典型排查流程、插件方式和自託管注意事項。

    Claude0
  6. 06

    Claude Code 配 Context7 MCP 查最新文檔:兩種安裝方式、use context7 怎麼寫、指定庫和版本

    Claude Code 寫出來的代碼用了舊版 API?Context7 是一個把庫的最新文檔餵給編程助手的 MCP 服務。本文按 Context7 官方倉庫和文檔,講兩種安裝方式、在 Claude Code 裏的添加命令、use context7 與 library ID 的寫法,以及使用時的注意事項。

    Claude0

0 條評論

登入 後參與評論

還沒有評論,來搶沙發~