ClaudeCodeGitHubActions使用教程"

admin 2026-10-20 11:05:03 网络安全文章 来源:ZONE.CI 全球网 0 阅读模式

cover_image

Claude Code GitHub Actions 使用教程

进击的Coder

2026年6月6日 19:09
上海

在小说阅读器读本章

去阅读

Claude Code GitHub Actions 是 Anthropic 官方推出的 GitHub Actions 集成方案。安装之后,只需要在 Issue、PR 或评论中 @claude,Claude 就会以 GitHub Bot 的身份在你的仓库里直接读代码、改代码、提 PR、跑 Review。

本文档介绍如何通过 Ace Data Cloud 的代理服务,把 Claude Code GitHub Actions 接到 claude-opus-4-8 等 Claude 模型上,无需 Anthropic 官方订阅。文中所有截图均来自我们公开的 demo 仓库 acedatacloud-dev/claude-code-action-demo,可以直接 fork 复现。

申请流程

要使用 Claude Code,首先可以到 Ace Data Cloud 控制台,或者识别下方二维码:

然后获取您的 API Token,留作备用。

如果你尚未登录或注册,会自动跳转到登录页面邀请您来注册和登录,登录注册之后会自动返回当前页面。

在首次申请时会有免费额度赠送,可以免费体验 Claude Code 服务。

配置 GitHub Secret

把刚才复制的 Token 添加到目标仓库的 Secret 中,命名为 ANTHROPIC_AUTH_TOKEN:

  1. 进入仓库 Settings → Secrets and variables → Actions
  2. 点击 New repository secret
  3. Name 填 ANTHROPIC_AUTH_TOKEN,Secret 粘贴 Token 原文
  4. 点击 Add secret

“

Ace Data Cloud 网关使用 Authorization: Bearer <token> 鉴权,但 anthropics/claude-code-action 内部会通过 Anthropic SDK 把请求改写成 x-api-key。下面的 Workflow 里会启动一个 GitHub Runner 上的本地 HTTP 代理,把 x-api-key 翻译回 Authorization: Bearer。

添加 Workflow 文件

在仓库中创建 .github/workflows/claude.yml,完整内容如下(这就是我们 demo 仓库实际跑成功的版本):

name: ClaudeCode

on:
issue_comment:
    types:[created]
pull_request_review_comment:
    types:[created]
issues:
    types:[opened,assigned]
pull_request_review:
    types:[submitted]

jobs:
claude:
    if:|
      (github.event_name == 'issue_comment' && contains(github.event.comment.body, '@claude')) ||
      (github.event_name == 'pull_request_review_comment' && contains(github.event.comment.body, '@claude')) ||
      (github.event_name == 'pull_request_review' && contains(github.event.review.body, '@claude')) ||
      (github.event_name == 'issues' && (contains(github.event.issue.body, '@claude') || contains(github.event.issue.title, '@claude')))
    runs-on:ubuntu-latest
    permissions:
      contents:write
      pull-requests:write
      issues:write
      id-token:write
    env:
      ANTHROPIC_BASE_URL:http://127.0.0.1:8788
    steps:
      -uses:actions/checkout@v4
        with:
          fetch-depth:1

      -name:StartAceDataCloudproxy(x-api-key→Bearer)
        env:
          UPSTREAM:https://api.acedata.cloud
          ACEDATA_TOKEN:${{secrets.ANTHROPIC_AUTH_TOKEN}}
        run:|
          cat > /tmp/proxy.py <<'PY'
          import http.server, socketserver, urllib.request, urllib.error, os
          UPSTREAM = os.environ[\"UPSTREAM\"].rstrip(\"/\")
          TOKEN = os.environ[\"ACEDATA_TOKEN\"]
          HOP = {\"host\", \"content-length\", \"connection\", \"keep-alive\",
                 \"proxy-authenticate\", \"proxy-authorization\", \"te\",
                 \"trailers\", \"transfer-encoding\", \"upgrade\"}

          classH(http.server.BaseHTTPRequestHandler):
              protocol_version=\"HTTP/1.1\"

              def_proxy(self,method):
                  body=self.rfile.read(int(self.headers.get(\"Content-Length\")or0))\\
                      ifmethodin(\"POST\",\"PUT\",\"PATCH\")elseNone
                  req=urllib.request.Request(UPSTREAM+self.path,data=body,method=method)
                  fork,vinself.headers.items():
                      ifk.lower()inHOPork.lower()in(\"authorization\",\"x-api-key\"):
                          continue
                      req.add_header(k,v)
                  req.add_header(\"Authorization\",f\"Bearer{TOKEN}\")
                  try:
                      resp=urllib.request.urlopen(req,timeout=600)
                      data,code,headers=resp.read(),resp.status,resp.headers
                  except urllib.error.HTTPError as e:
                      data,code,headers=e.read(),e.code,e.headers
                  self.send_response(code)
                  fork,vinheaders.items():
                      ifk.lower()in HOP:
                          continue
                      self.send_header(k,v)
                  self.send_header(\"Content-Length\",str(len(data)))
                  self.end_headers()
                  self.wfile.write(data)

              defdo_GET(self):self._proxy(\"GET\")
              defdo_POST(self):self._proxy(\"POST\")
              defdo_PUT(self):self._proxy(\"PUT\")
              defdo_DELETE(self):self._proxy(\"DELETE\")
              deflog_message(self,*a,**k):pass

          classT(socketserver.ThreadingMixIn,http.server.HTTPServer):
              daemon_threads=True
              allow_reuse_address=True

          T((\"127.0.0.1\",8788),H).serve_forever()
          PY
          nohuppython3/tmp/proxy.py>/tmp/proxy.log2>&1&
          foriin$(seq120);do
            curl-sS-o/dev/nullhttp://127.0.0.1:8788/&&break
            sleep0.3
          done

      -name:RunClaudeCodeviaAceDataCloud
        uses:anthropics/claude-code-action@v1
        with:
          anthropic_api_key:dummy-not-used
          github_token:${{secrets.GITHUB_TOKEN}}
          claude_args:|
            --model claude-opus-4-8
          show_full_output:'true'

提交之后,在 GitHub Actions 的 Workflows 列表中就可以看到这个 Claude Code 工作流:

几个关键点

  • ANTHROPIC_BASE_URL: http://127.0.0.1:8788 把所有 Anthropic API 请求指向本地代理。
  • 代理脚本读取 Secret ANTHROPIC_AUTH_TOKEN,把上游请求里的 x-api-key 头丢弃,统一替换为 Authorization: Bearer <token> 再转发到 https://api.acedata.cloud。
  • anthropic_api_key: dummy-not-used 必须填一个非空字符串,否则 claude-code-action 启动前的校验会直接失败。真正鉴权用的是 Secret 里的 ANTHROPIC_AUTH_TOKEN。
  • --model claude-opus-4-8 指定使用 Claude Opus 4.8,可以替换为 Ace Data Cloud 支持的任意 Claude 模型,例如 claude-sonnet-4-5、claude-haiku-4-5。

触发 Claude

新建一个 Issue,正文里写 @claude 加你要它做的事。例如下图,标题 Smoke test #11 (Opus 4.8),正文 @claude Reply with: OK.:

大约 30 秒后,github-actions Bot 就会用 Claude Opus 4.8 的输出回复评论:

“

Claude finished @acedatacloud-dev's task in 22s — View job

OK.

对应的 Workflow 运行结果是 Success,总耗时 51 秒:

工作原理

GitHub Issue / PR comment 含 @claude
  └─→ GitHub Actions 触发 .github/workflows/claude.yml
        ├─ Step 1: 启动本地代理 127.0.0.1:8788
        └─ Step 2: anthropics/claude-code-action@v1
              └─→ Claude Code CLI 把 ANTHROPIC_BASE_URL 当成 Anthropic API
                    └─→ 请求落到本地代理(自带 x-api-key=dummy-not-used)
                          └─→ 代理替换为 Authorization: Bearer 
                                └─→ 转发到 https://api.acedata.cloud
                                      └─→ Claude Opus 4.8 实际推理
              └─→ Claude 在仓库里读代码 / 写代码 / 评论 / 提 PR

整条链路上唯一关键的转换在本地代理这一步。Ace Data Cloud 网关只识别 Authorization: Bearer <token> 这一种鉴权头,但官方 claude-code-action 内部使用的是 Anthropic SDK,会强制以 x-api-key 头发起请求。中间这个不到 40 行的 Python HTTP 代理就是用来桥接两种鉴权约定的,全部跑在 GitHub Runner 内存里,Token 不出 Runner。

切换模型

通过 claude_args 即可切换:

      - name:RunClaudeCodeviaAceDataCloud
        uses:anthropics/claude-code-action@v1
        with:
          anthropic_api_key:dummy-not-used
          github_token:${{secrets.GITHUB_TOKEN}}
          claude_args:|
            --model claude-sonnet-4-5
            --max-turns 8
          show_full_output:'true'
参数 说明
--model 模型名,常用 claude-opus-4-8、claude-sonnet-4-5、claude-haiku-4-5
--max-turns 单次任务最多对话轮次,默认 10
--allowed-tools 限制可用工具,逗号分隔
--mcp-config 额外 MCP 配置文件路径

可用模型清单可在 Claude Messages 服务页面 查询。

常见问题

1. Workflow 启动失败,提示 Either anthropic_api_key or claude_code_oauth_token must be provided

claude-code-action@v1 启动前必须在 anthropic_api_key、claude_code_oauth_token 或工作负载联合三者中至少给一个非空值。即使我们后面会用 Bearer Token 鉴权,也必须给 anthropic_api_key 一个占位字符串(示例里的 dummy-not-used)。

2. 代理返回 401,CLS 里看到 Authorization: Bearer -

通常是 Secret 设置出错。强烈避免用 gh secret set ANTHROPIC_AUTH_TOKEN --body - 这种从 stdin 读入的写法 —— 如果 stdin 没接好,Secret 真的会被设成字面量 -。推荐写法:

gh secret set ANTHROPIC_AUTH_TOKEN --repo <org>/<repo> --body '<your-real-token>'

设完后可以在 Workflow 里临时加一行 echo \"len=${#ACEDATA_TOKEN}\" 打印长度(不会泄露原值),验证 Secret 是否生效。

3. Claude 没有响应 @claude

  • 确认 if: 条件覆盖了触发事件,比如评论触发对应 issue_comment / pull_request_review_comment。
  • 确认仓库里有 .github/workflows/claude.yml 且 Actions 没有被禁用。
  • 进入 Actions 选项卡,确认能看到对应的工作流 Run。
  • 检查代理 Step 是否成功启动,可参考 demo 仓库里 Proxy log (on failure) Step 的实现,把 /tmp/proxy.log 打出来定位问题。

4. 如何查看剩余额度

登录 Ace Data Cloud 控制台 即可查看当前账户的剩余额度。
控制台 - 使用历史 可以看到每一次调用的扣费明细。

了解更多

  • 🧪 acedatacloud-dev/claude-code-action-demo — 本文使用的、可直接 fork 复现的 demo 仓库
  • 📖 Claude Code GitHub Actions 官方文档
  • 🛠️ anthropics/claude-code-action — Action 源码
  • 🔧 Ace Data Cloud Claude Messages 服务

ClaudeCodeGitHubActions使用教程" 网络安全文章

ClaudeCodeGitHubActions使用教程"

本文档介绍如何通过AceDataCloud的代理服务在GitHubActions中集成ClaudeCode,无需Anthropic官方订阅。核心步骤包括申请APIToken、配置GitHubSecret、添加Workflow文件,并通过本地HTTP代理转换鉴权头,使ClaudeOpus4.8等模型能在Issue或PR中自动读代码、改代码和提PR。
当Skills安全检测出来的时候,我们是否应该考虑---Skills木马化" 网络安全文章

当Skills安全检测出来的时候,我们是否应该考虑---Skills木马化"

本文深入分析了AISkills生态的安全风险,指出Skills本质是长文本提示工程,但存在严重供应链攻击威胁。文章以ClawHavoc事件为例,展示了恶意Skill通过域名仿冒、虚假星标等手段窃取数据,并揭示了权限滥用、免杀技术(如多态变形、零日利用)及AI-Agent自动化感染等高级攻击手法。作者强调用户安全意识薄弱,并提供了三看三查防御建议,呼吁加强生态治理。
脸是最诚实的情报源,如何从公开视频里读出谈判底牌" 网络安全文章

脸是最诚实的情报源,如何从公开视频里读出谈判底牌"

本文探讨了如何通过分析公开视频中的微表情来解读人物的真实情绪与谈判底牌。文章从心理学研究入手,解释了微表情是人类试图压抑真实情绪时在脸上一闪而过的反应,并介绍了系统化的分析方法FACS。随后,文章通过泽连斯基与特朗普的两次会面、阿拉斯加会谈等四个真实案例,详细展示了如何通过面部肌肉的细微变化(如眉头收拢、鼻翼收缩、单侧微笑)来判断人物的情绪状态、内心活动及沟通策略。最后,文章强调了进行微表情分析时应关注情绪变化的完整过程、言语与非言语的一致性以及建立基准状态等原则,指出这种分析能为战略决策提供有价值的开源
评论:0   参与:  0