GitHub Actions 在中国大陆能用吗?Runner 连接检查清单

GitHub Actions 在中国大陆能用吗?Runner 连接检查清单

Jason Chen
2026年9月12日· 5 分钟阅读

GitHub Actions 在中国大陆不是一条网络路径:GitHub-hosted runner 在 GitHub 管理的基础设施执行,而位于中国大陆的 self-hosted runner 使用该主机自己的出站路线。先确定 runner 和首个失败步骤;排队、checkout、secret、artifact 或第三方服务错误需要不同处理。

关键要点:

  • 分离 workflow 触发、队列与分配、runner 连接、repository checkout、GitHub 服务和外部依赖。
  • GitHub-hosted 结果不测量开发者本地中国网络;中国大陆 self-hosted runner 才使用当地路线。
  • Self-hosted runner 主动建立出站连接,需要按官方清单获得获准 endpoint 访问。
  • 路由无法修复 label、权限、secret、组织策略、账单、workflow 语法或第三方故障。

浏览器与网络路线的基础判断先看中国大陆网站与 App 通用排障。工作站上的网页、API、HTTPS Git、SSH、SSO 与 repository 访问请看GitHub 开发者访问检查清单;中国 VPN 规划指南说明更广的网络和合规边界。本文只处理 Actions 执行。

GitHub Actions 在中国大陆的 runner 在哪一阶段失败?

建立执行路径时间线

workflow 必须先被触发、被接受、进入队列、分配给匹配 runner、开始执行,再完成各个需要网络的步骤。记录 run/job URL、event、commit、runner 类型、label、首个失败 step、时间和脱敏错误。

阶段应保留的证据常见非网络原因
触发event、branch、filter、workflow 版本path filter、禁用或语法错误
队列label、runner group 与等待状态无匹配 runner、concurrency、套餐限制
Runner sessionhosted image 或 self-hosted 身份服务离线、更新或分配问题
Checkout/服务首个失败主机与操作token scope、权限或仓库状态
Workflow 命令exit code 与有界日志测试失败、缺 secret、第三方故障

不要把 secret、OIDC token、私有仓库名、runner registration token、内部 endpoint 或完整环境 dump 放进公开 issue。

1. 确认 job 实际在哪里执行

读取 runs-on、runner group、label、reusable workflow 和路由表达式。GitHub-hosted runner 是按所请求的 image 新建、由 GitHub 管理的虚拟机,它的出站网络不是中国大陆用户的浏览器或笔记本路线;GitHub 对 hosted image 与网络特征有单独说明。[1]

Self-hosted runner 运行在所有者部署和维护的基础设施。[2]记录其实体或云端位置、系统、runner 版本、服务身份、代理来源、label、group 和是否 ephemeral。只有主机位于中国大陆时,它自己的当地出站路径才直接相关。

不能根据谁点击 “Run workflow” 推断执行位置。执行 checkout 和后续命令的是 runner 主机。

2. 区分触发、跳过和排队问题

确认目标 branch 上存在正确 workflow 版本,并且 event、branch、path、environment 与 reusable workflow 条件匹配。没有创建 run 时,runner 网络尚未参与;job 被 skipped 时,应检查 expression 与 dependency。

job 一直排队时,对照请求 label、runner group 与已注册 runner。检查 concurrency、environment approval、套餐或账单限制、组织策略,以及管理员是否禁用 Actions 或某类 action。没有匹配 label 的等待不是中国网络错误。

改 label 前保存队列时间。放宽 label 可能把敏感代码派到非预期 runner,属于授权决策,不是快捷诊断。

3. 核对 self-hosted runner 分配和出站连接

确认 runner 属于目标 repository、organization 或 enterprise,并获准执行该 job。检查本地 runner service 和有界诊断日志,不输出 registration credential。服务已安装仍可能离线、卡在更新、被分配到别处或受策略限制。

GitHub 说明 self-hosted runner 主动出站连接 GitHub,以接收任务并下载更新;正常操作不要求 GitHub 发起入站连接。[2]主机应通过获准 firewall 或 proxy 解析并访问官方列出的 HTTPS endpoint。部分域名使用 CNAME,防火墙可能需要递归处理。[2]

域名清单应由网络所有者依据当前官方文档维护。不要关闭 TLS、接受不匹配证书、暴露 runner 入站端口或绕过组织检查。

4. 分离 checkout、action、artifact、cache 与 package

runner 启动后,定位第一个需要网络的 step。checkout 可能涉及 GitHub API、archive、HTTPS Git、LFS 或 submodule;下载 action、release、container image、package、cache 和 artifact 可能走其他主机。checkout 成功不能证明 artifact 上传或 container 拉取也会成功。

记录 action 名称与 immutable revision、操作、主机类别、状态、超时和已传输的字节数。第三方 marketplace action 及 workflow 自己调用的 API 要与 GitHub 服务区分;外部服务故障不能称作 GitHub Actions 不可用。

若失败点属于软件包,分别用Docker Hub、npm或PyPI专项清单。

5. 检查 token、权限、secret、OIDC 与策略

收到 HTTP 响应可能表示传输已到服务,但身份或授权失败。检查 job 的 permissions、Actions policy、fork 限制、environment approval、secret 可见性、protected branch 和 reusable workflow 的 secret 传递,绝不打印 token claim 或 secret 值。

OIDC 还包含向 GitHub 请求 token 与云身份交换两段。分别判断 GitHub token 请求,和云提供商对 issuer、audience、subject、role 或 policy 的验证。换网络路线不能修正错误 trust policy。

私有 repository 和 package 必须核对 job identity 权限,不能把个人 token 复制到 self-hosted runner 来掩盖错误。

6. 在受控条件比较最小 job

建立或使用获准的非敏感诊断 workflow,只报告 runner 类型、时间和有界连接结果,不能 dump 环境变量。固定 commit、workflow、runner label、账户策略和时间窗口。只有组织允许时,才比较 GitHub-hosted 与目标 self-hosted runner。

在适用法律和政策允许的前提下,AethoVPN 可以为你自己拥有的 self-hosted runner 提供受控的备选路径:在这台机器上安装 Linux(Debian/Ubuntu 的 .deb 安装包)或 Windows 客户端,连接列表中的一个位置,再重跑同一个最小任务,让变化的只有网络路径。它不能修复 GitHub 故障、缺失的标签、Actions 政策、计费、密钥、工作流逻辑或第三方端点;未经所有者批准,也不得安装到受管基础设施上。如果是个人测试机,在修改 runner 设置前开始 AethoVPN 3 天试用。

有效结论应是“hosted 成功,而中国大陆 self-hosted runner 在 artifact endpoint 失败”这类窄边界,不是对所有中国大陆 Actions run 的长期判断。

7. 从触发到最终 artifact 验证恢复

只实施已确认修正:恢复获准 runner service、修正准确 label、更新授权 proxy/allowlist、调整权限、固定 action、修复 workflow,或等待已确认 incident。保留原 run 证据后,对同一 commit 和 workflow 重跑。

核对所有 required job、预期 artifact/cache、部署门禁及下游 status,不能在第一个绿色 step 停止。Self-hosted runner 还要确认回到预期 idle 或 ephemeral 生命周期,临时凭据和 workspace 符合组织政策。

记录 runner 位置、路线、workflow commit、原首个失败点、最终结果和未测试 endpoint。临时路线必须有所有者与到期时间,不能留下不明 bypass。

总结

  • 确认 runner 位置,分离触发、排队、分配与执行。
  • 分别映射 checkout、action、artifact、cache、package、OIDC 与第三方请求。
  • Self-hosted runner 应验证获准出站 HTTPS,不开放入站服务。
  • 保持 token、TLS、组织策略与 runner 信任边界。
  • 重跑同一 commit,并核对所有 required job 和 artifact。

常见问题

GitHub-hosted runner 会经过我的中国网络吗?

不会。它在 GitHub 管理的基础设施运行;本地浏览器可以触发或查看 workflow,但 job 由 hosted runner 执行。

Self-hosted runner 需要开放入站端口吗?

正常情况下由 runner 主动出站连接。应遵循 GitHub 当前 endpoint 指引和网络所有者政策,而不是暴露入站服务。

为什么 job 一直排队?

检查 label、runner group、离线状态、concurrency、approval、policy 与套餐限制;排队时可能尚未发起任何外部连接。

为什么 checkout 成功但 artifact 上传失败?

checkout 与 artifact 服务可能使用不同 endpoint、token 和传输模式,应单独记录首个 artifact 请求。

VPN 能修复缺少的 Actions secret 吗?

不能。路由无法创建 secret、授予 token 权限、批准 environment 或修改组织策略。

Actions 与 GitHub 网页访问是同一个测试吗?

不是。网页、Git 传输、API、GitHub-hosted runner、self-hosted runner 和 workflow 依赖是不同的路径。工作站上的操作请使用专门的 GitHub 访问指南。

如何证明中国大陆 runner 可运行 Actions?

记录准确 runner 位置和版本、workflow commit、触发、分配、必需服务步骤、最终 job 与 artifact。注明时间和范围,而不是声称长期可用。

免责声明:本文提供一般操作与安全信息,不构成法律、雇主政策、云架构或服务可用性建议。请遵守适用法律、GitHub 当前文档及组织的 runner 与网络控制。

来源

  1. GitHub Docs, GitHub-hosted runners reference: https://docs.github.com/en/actions/reference/runners/github-hosted-runners
  2. GitHub Docs, Self-hosted runners reference: https://docs.github.com/en/actions/reference/runners/self-hosted-runners

Sources checked 2026 年 9 月 12 日。


延伸阅读:

开启 3 天免费试用

注册即可免费体验全部高级功能。

*仅限新用户;每位用户只能获得一次试用。

GitHub Actions 在中国大陆能用吗?Runner 连接检查清单 | AethoVPN