跳至主要内容

组织中 GitHub 托管运行器 Azure 专用网络配置疑难解答

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

谁可以使用此功能?

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

组织中 GitHub 托管运行器专用网络配置疑难解答

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

在GitHub中添加网络配置*之前*,请确保您的Azure资源已配置。

支持的区域

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

注意

如果您在GHE.com上使用数据驻留,则支持的区域会有所不同。请参阅“GHE.com的网络详细信息”。

GitHub.com支持以下区域。

  • 美国东部
  • 美国东部2
  • 美国西部2
  • 美国西部3
  • 美国中部
  • 美国北部中部
  • 澳大利亚东部
  • 日本东部
  • 法国中部
  • 德国西部中部
  • 北欧
  • 挪威东部
  • 瑞典中部
  • 瑞士北部
  • 英国南部
  • 东南亚
  • 韩国中部

Azure专用网络在以下区域支持GPU运行器。

  • 美国东部
  • 美国西部
  • 美国北部中部

Azure专用网络在以下区域支持arm64运行器。

  • 美国东部
  • 美国东部2
  • 美国西部2
  • 美国西部3
  • 美国北部中部

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

运行器无法连接到互联网

GitHub 托管的运行器需要能够建立到 GitHub 的出站连接,以及 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`标志运行命令以查看更多信息。