症状:GitHub Actions macOS larger runners 企业内网接入受阻,或防火墙要求固定来源 IP。
最快解法:先核对当前网络限制;需要直接访问内网或静态 IP 白名单时,不要默认选 macOS larger runners,改评估网络路径已验证的自管 Mac。只有依赖可从 runner 访问,或中介接入经过实测,才优先考虑托管 runner。

适合负责企业网络策略、iOS/macOS 流水线和 CI 安全采购的 IT 负责人、平台工程师与决策者。
如果你只在找 runner 性能或 Xcode 配置,这篇不讨论那类选型。

场景一:依赖都能从公开网络访问

先区分“公开可达”和“组织授权可达”。私有代码仓库、私有包注册表即使需要登录,也未必处于企业内网;反过来,仓库已授权给 workflow,也不代表构建机能路由到内部服务。

GitHub 的 macOS larger runners 网络限制说明明确写明,macOS larger runners 当前不支持静态 IP 和 Azure private networking。若项目只需下载公开依赖,且构建所需服务均可从 runner 访问,可以把托管 runner 列入优先评估范围,但仍要用项目本身验证。

  • 检查 workflow 中的 runs-on、依赖下载命令、制品上传目标及服务端地址。
  • 分清包仓库是公网入口加身份认证,还是必须经过公司 VPN、专线或内网 DNS 才能访问。
  • 对照构建日志确认实际请求成功;不要只凭 YAML 配置推断网络已通。

场景二:构建必须访问私有仓库或内网服务

先画出依赖路径,再选 runner。把私有包注册表、制品库、密钥服务和内部 API 分开列出;每项标明入口方向、DNS 解析、认证方式及是否要求企业出口 IP。组织授权、凭证有效和网络可达是三项不同的验收条件。

GitHub 的 larger runners 权限与网络配置说明指出,含网络配置的 runner group 不能分配 macOS larger runners。这是关键边界:即使通用 GitHub-hosted runner 文档介绍了私网连接思路,也不能因此推断这项配置适用于 macOS larger runners。

依赖与策略 托管 macOS runner 的判断 验收证据
公开依赖,无企业网络硬限制 可优先试跑;仍需核实认证与构建请求 workflow 日志、依赖清单、制品记录
私有仓库有公网入口,按身份授权 先验证网络可达与凭证最小权限 拉取结果、认证日志、访问审计
依赖只能通过企业内网路由 不要假设 larger runner 可直连 DNS、端口测试、网络访问日志
防火墙只接受固定来源 IP macOS larger runners 不满足静态 IP 前提 防火墙策略、来源地址记录

验收时,至少让一条真实流水线访问必需资源,并同时检查 runner 日志与服务端访问日志。只看到构建步骤启动,不代表私有依赖已经按预期路径访问。

场景三:防火墙白名单要求静态来源 IP

如果策略明确要求固定来源地址,先把这个条件视为硬约束。GitHub 的 larger runners 管理文档明确说明 macOS larger runners 不支持静态 IP。不要把其他操作系统 runner 的能力外推到 macOS,也不要把“IP 白名单”泛化成其他身份控制就能替代的条件。

  • 让安全团队确认白名单针对的是入站来源地址、出口地址还是其他身份属性。
  • 若固定 IP 不可协商,评估部署在企业网络路径上的自管 Mac;地址是否稳定仍由实际网络配置决定。
  • 如果考虑网关或代理,先确认目标服务能否经该入口访问,并由策略负责人批准例外与审计方式。

需注意,IP 白名单只是来源筛选,不等于工作流可信,也不等于 runner 主机隔离。公开仓库分支、外部贡献者触发的 workflow 和可写凭证都要单独评估。

场景四:由受控中介连接特定服务

如果服务提供受控 API 入口,不一定要让整个构建环境加入企业内网。GitHub 的使用 OIDC 认证 API 网关介绍了由网关验证 workflow 身份并代为请求私有服务的做法。它适合范围明确的 API 操作,不是通用网络隧道;网关仍需由企业部署和维护,并限制哪些 workflow 可以访问。

另一种思路是网络覆盖。GitHub 的网络覆盖方案说明列出端点可达、密钥保管、UDP 通信及高可用等考虑;但示例中的 runner 配置不能直接证明目标 macOS larger runner 适用。先做兼容性试验,再将它列为正式方案。

中介方式 能解决什么 上线前必验项
OIDC API 网关 将特定请求交给网关代理,不必开放整个内网路由 workflow 身份条件、API 范围、网关日志
网络覆盖 在 runner 与私有服务间建立受控路径 macOS 兼容性、端点可达、密钥轮换、故障恢复
Azure private networking 按 Azure VNET 策略连接受支持的 runner 官方适用范围、网络配置、服务端日志

GitHub 的 Azure private networking 适用范围说明,该功能面向 Linux 和 Windows larger runners;此外,配置 Azure 私网的 larger runners 使用动态 IP。不要将 VNET 网络接入与静态 IP 白名单当成同一能力。

⚠️ 中介方案只有在目标服务、凭证范围、出口路径和审计记录都通过实测后,才算满足接入要求。通用文档提供的是方案方向,不是对目标 macOS runner 的兼容承诺。

场景五:自管 Mac 位于企业网络路径中

自管 Mac 的优势是可以按企业实际网络拓扑部署和配置;但注册 runner 不会自动赋予它内网权限。主机所在网段、DNS、防火墙策略、代理设置和服务端授权都需要你逐项确认。GitHub 的自托管 runner 通信要求还说明,runner 主机需要能向 GitHub 建立 HTTPS 连接;文档列出的最低网络要求为上下行各 70 kbps,并要求支持 443 端口出站连接。

若你也在比较远程托管 Mac,可查看 MACCOME 的香港 Mac 方案页面了解公开列出的方案信息;地域选项本身不能证明主机可进入你的企业内网,仍须按实际网络拓扑验收。

自管 Mac 也会增加维护责任:操作系统和 runner 更新、故障恢复、凭证保护、磁盘清理及并发容量都由你纳入运维流程。更重要的是,自管或远程控制不等于安全隔离;不要让不可信 workflow 在持有发布凭证、可访问敏感网络的常驻主机上任意执行。

  • 按企业真实策略确认必需域名、服务端口和身份认证。
  • 用测试 workflow 验证连通性,并保留失败日志与服务端审计记录。
  • 限制哪些仓库和 workflow 可调度到该主机,凭证按任务拆分、按需注入。
  • 规划补丁、离线、重装和主机失陷后的撤销流程。

场景六:混合流水线拆分不同网络任务

同一条 iOS CI 不必强行使用一种 runner。公开依赖构建、单元测试等任务可单独评估托管 runner;必须访问企业私有服务的任务,则放到已验证的企业网络路径中。拆分的重点不是多写几个 job,而是明确任务交接的产物、身份和发布权限边界。

  • 先拆分任务:哪些阶段只用公开资源,哪些阶段必须访问内网或受限服务。
  • 明确交接内容:构建产物的摘要、来源、保留位置,以及下一阶段读取权限。
  • 分别验证任务路由、产物传递、签名和发布;不要默认前一阶段的身份可沿用到后一阶段。
  • 在架构记录中列出网络硬约束、运维责任和仍未通过的验收项。

这类拆分会增加 workflow 配置、产物交接和故障排查成本;如果任务之间共享状态太多,先评估能否拆出清晰接口,再决定是否混合承载。

上线前的网络验收步骤

按实际流水线执行,不要只在空主机上跑一次连通测试。

  1. 导出 workflow 和依赖清单,标出每个域名、端口、私有服务及所需凭证。
  2. 逐项归类公开入口、身份授权入口、企业内网入口和固定 IP 白名单要求。
  3. 对照官方文档确认 macOS larger runners 是否满足要求;有疑问的中介能力标为待验证。
  4. 在候选 runner 上运行最小测试 workflow,执行 DNS、端口、认证及真实依赖拉取。
  5. 对照 runner 日志、网关或防火墙日志、服务端访问日志,核实真实路径与身份。
  6. 验收构建产物传递、签名和发布权限;保留失败场景、回滚方式与责任人。

选型勾选清单

  • [ ] 所有构建依赖都已列出,并区分公网可达、身份授权和企业私网。
  • [ ] 已确认防火墙是否硬性要求固定来源 IP。
  • [ ] 若采用网关或网络覆盖,已证实它适用于目标 macOS runner,并完成真实流水线测试。
  • [ ] 自管 Mac 的网络位置、runner 调度权限、凭证范围和维护责任均已明确。
  • [ ] 混合任务的产物交接、签名权限和发布边界已完成验收。
  • [ ] 网络日志与构建日志可以共同证明访问路径;失败时能定位并回退。

常见问题

私有仓库已授权给 workflow,就一定能被 runner 访问吗?
不一定。授权解决的是身份权限,不会自动建立到私网的路由。你还要验证 DNS、网络端口、认证方式和访问日志。

换成自管 Mac 就等于满足内网安全要求吗?
不等于。你需要确认主机的实际网络位置、访问策略、凭证范围和 workflow 调度权限,并设计维护与故障处置流程。

API 网关或网络覆盖能否替代直接接入?
视服务类型与 runner 兼容性而定。先验证目标 API、身份声明、出口路径、密钥管理和审计;未在目标 macOS runner 上通过真实测试前,应标记为待验证。

哪些 CI 步骤适合拆到不同 runner?
当公开依赖任务与内网任务的网络权限、凭证或发布职责不同时,可以分开承载。先验证产物交接、来源身份和签名环节,再确定最终路由。

按真实网络路径选 Mac 方案

如果你的当前方案依赖 macOS larger runners,它在静态 IP 白名单、Azure 私有网络配置以及 macOS 目标环境的中介兼容性上都有明确核验边界;临时拼接网关还会带来身份、凭证和运维责任。若你需要短期验证自管 Mac 是否能走通目标企业网络,可以先查看 MACCOME 的远程 Mac 方案入口,再按真实 workflow 核实网络接入方式、适用范围和限制。若主机必须在特定企业网段、需要物理接口或长期承载稳定重负载,应优先评估自购或由企业直接管理的主机;不应在网络边界未验收前把远程租赁当成已验证的内网接入承诺。