跳至主要内容

对组织中的 GitHub 托管运行程序进行 Azure 专用网络配置的故障排除

了解在创建 Azure 专用网络配置以将 GitHub 托管运行程序与 Azure VNET 结合使用时,如何修复常见问题。

谁可以使用此功能?

拥有 GitHub 团队计划的组织所有者可以在组织级别为 GitHub 托管运行程序配置 Azure 专用网络。

对组织中的 GitHub 托管运行程序进行专用网络配置的故障排除

在 GitHub 中创建网络配置之前配置 Azure 资源

确保在 GitHub 中添加网络配置之前已配置 Azure 资源。

支持的区域

GitHub Actions 服务支持 Azure 提供的所有区域的一个子集。为了促进 GitHub Actions 服务和子网之间的通信,子网必须位于以下受支持区域之一。

  • EastUs
  • EastUs2
  • WestUs2
  • WestUs3
  • CentralUs
  • NorthCentralUs
  • SouthCentralUs
  • AustraliaEast
  • JapanEast
  • FranceCentral
  • GermanyWestCentral
  • NorthEurope
  • NorwayEast
  • SwedenCentral
  • SwitzerlandNorth
  • UkSouth
  • SoutheastAsia

Azure 专用网络支持以下区域中的 GPU 运行程序。

  • EastUs
  • WestUs
  • NorthCentralUs
  • SouthCentralUs

Azure 专用网络支持以下区域中的 arm64 运行程序。

  • EastUs
  • EastUs2
  • WestUs2
  • NorthCentralUs
  • SouthCentralUs

注意

GPU 和 arm64 运行程序目前处于测试阶段,可能会发生更改。

如果你的目标区域不受支持,请在此 GitHub 表单 中提交新区域可用性请求。你还可以使用全局虚拟网络对等互连来连接 Azure 区域中的虚拟网络。有关详细信息,请参阅 Azure 文档中的 虚拟网络对等互连

运行程序无法连接到 Internet

GitHub 托管的运行程序需要能够与 GitHub.com 建立出站连接,以及与 GitHub Actions 所需的其他 URL 建立连接。

如果 GitHub Actions 无法与运行程序通信,则池将永远无法使运行程序联机,因此不会选取任何作业。在这种情况下,池将具有以下错误代码。

VNetInjectionFailedToConnectToInternet

要解决此问题,请确保你已根据“配置 Azure 资源”过程配置 Azure 资源。

部署范围已锁定

你可以在 Azure 订阅或资源组上设置锁,这可以防止创建或删除 NIC。

阻止创建 NIC 的锁无法选取作业,而阻止删除 NIC 的锁会耗尽子网地址空间(通过继续创建 NIC)或在服务重试部署异常时具有较长的队列到分配 (QTA) 时间。

在这种情况下,池将具有以下错误代码。

RunnerDeploymentScopeLocked

要解决此问题,请删除锁或将你正在使用的子网更改为没有锁的子网。

部署被策略阻止

你可以在其管理组、订阅、资源组或各个资源上创建策略。最常见的策略是要求资源具有某些标记或具有特定名称。

该策略将阻止创建 NIC,这意味着池不会选取作业,因为没有 VM 可以联机。

在这种情况下,池将具有以下错误代码。

RunnerDeploymentBlockedByPolicy

要解决此问题,请移除策略或将您正在使用的子网更改为没有策略的子网。

子网已满

子网分配的 IP 地址数量有限。每个运行程序消耗一个 IP 地址。如果服务尝试扩展到超过最大运行程序计数设置,它将遇到部署错误。

这会影响池添加其他运行程序的能力。如果队列深度足够高,您可能会遇到队列到分配 (QTA) 时间增加的情况。作业仍将被处理,但并发性可能达不到您的预期。

在这种情况下,池将具有以下错误代码。

VNetInjectionSubnetIsFull

要解决此问题,请增加您正在使用的子网大小或减少池的最大运行程序计数以匹配您的子网大小。

不正确的 NSG 或防火墙规则

“配置您的 Azure 资源”过程列出了所需开放。但是,您可能拥有具有多个下游代理或防火墙的复杂生产网络。

如果运行程序无法联机,则不会选取任何作业。您的设置过程可能涉及设置运行程序应用程序并与 GitHub Actions 服务通信以指示其已准备就绪,以及获取和安装反滥用工具。如果这两个过程中的任何一个失败,则运行程序无法选取任何作业。

如果您遇到这些问题,请尝试在您用于与 GitHub 托管的运行程序进行专用网络连接的同一子网上设置虚拟机。但是,如果您有服务关联链接 (SAL),则这是不可能的。

如果您有 SAL,请尝试在虚拟网络中设置类似的子网,并在该网络上放置虚拟机。然后尝试在其中注册自托管运行程序。

在配置 Azure 资源时 HTTP 请求有效负载失败

在运行配置 Azure 资源的命令时,请确保您使用的是正确的 API 版本和 businessId 属性。如果您使用的是其他属性,您的命令可能会返回以下错误。

(HttpRequestPayloadAPISpecValidationFailed) HTTP request payload failed validation against API specification with one or more errors. Please see details for more information.

如果您遇到此错误,您可以使用 ---debug 标志运行命令来查看更多信息。