Skip to main content

将代理服务器与运行器一起使用

可以在隔离环境中配置运行程序,以使用代理服务器与 GitHub进行安全通信。

为 Linux 和 Windows 运行器配置代理服务器

如果运行程序需要通过代理服务器进行通信,则可以使用环境变量或系统级配置来配置代理设置。

VariableDescriptionExample
https_proxyHTTPS 流量的代理 URL。 如果需要,可以包括基本身份验证。http://proxy.local
http://192.168.1.1:8080
http://username:password@proxy.local
http_proxy用于 HTTP 流量的代理 URL。 如果需要,可以包括基本身份验证。http://proxy.local
http://192.168.1.1:8080
http://username:password@proxy.local
no_proxy以逗号分隔的主机或 IP 地址列表,这些主机或 IP 地址应绕过代理。 某些客户端只在直接连接到 IP 地址而不是主机名时才接受 IP 地址。example.com
example.com,myserver.local:443,example.org

运行程序应用程序启动时会读取代理环境变量,因此在配置或启动运行程序应用程序之前,必须设置环境变量。 如果代理配置发生更改,则必须重启运行器应用。

在 Windows 计算机上,代理环境变量名称不区分大小写。 在 Linux 和 macOS 机器上,建议环境变量全部小写。 如果 Linux 或 macOS 上的环境变量具有小写和大写形式(例如 https_proxyHTTPS_PROXY),自托管运行程序应用程序会使用小写环境变量。

自托管运行器和 GitHub 通过 HTTPS(端口 443)建立连接。

示例配置

注意

为了避免问题,无论所用操作系统和 shell 的行为为何,最好将环境变量视为区分大小写。

Linux 和 macOS

为运行器设置代理环境变量。

Shell
export https_proxy=http://proxy.local:8080
export http_proxy=http://proxy.local:8080
export no_proxy=example.com,localhost,127.0.0.1

Windows操作系统

在 Windows 上,可以通过设置环境变量或使用 netsh 命令来配置代理设置。 netsh 方法适用于依赖于 WinHTTP API 的应用程序和服务。

使用专用网络的运行程序仍需要设置环境变量。 是否需要配置 netsh 取决于工作流中使用的应用程序。

Shell
netsh winhttp set advproxy setting-scope=machine settings={\"Proxy\":\"proxy.local:8080\",\"ProxyBypass\":\"168.63.129.16;169.254.169.254\",\"AutoconfigUrl\":\"\",\"AutoDetect\":false} 

在自定义映像生成期间配置此配置时,用于 setting-scope=machine 确保在重新启动后和 VM 映像期间保留代理设置。

使代理设置持久化

在自定义映像生成过程中设置这些环境变量时,请确保配置在重新启动或映像重新生成期间保持。

Linux 和 macOS

将变量写入/etc/environment

 echo 'http_proxy=http://proxy.local' >> /etc/environment

Windows操作系统

设置系统范围的环境变量。

Shell
[Environment]::SetEnvironmentVariable("http_proxy", "http://proxy.local", "Machine")

为 Azure 运行器配置代理

如果运行程序托管在 Azure 中,可以是自承载运行程序,要么是使用专用网络部署的 GitHub 托管的大型运行程序,则可能需要配置代理,以允许与 GitHub 服务的出站连接,同时保持网络隔离。

应将 Azure 元数据和管理 IP 添加到 no_proxy 列表中,以确保运行程序可以访问所需的 Azure 服务。 这些终结点允许 Azure 虚拟机检索正常运行所需的配置和标识信息。

这两个 Azure IP 包括:

使用 .env 文件设置代理配置

注意

在 GitHub 托管的运行程序上无法使用 .env 文件来设置代理配置。

在自托管运行程序上,可以通过将变量添加到自托管运行应用程序目录(即下载并解压该运行程序软件的目录)中的 .env 文件来配置代理设置。 当运行程序配置为在系统帐户下作为服务运行时,此方法非常有用。 运行器启动时,它会读取在.env中设置的用于代理配置的变量。

.env 代理配置示例

Shell
https_proxy=http://proxy.local:8080
no_proxy=example.com,myserver.local:443

设置 Docker 容器的代理配置

如果你在工作流中使用 Docker 容器操作或服务容器,则除了设置上述环境变量外,可能还需要配置 Docker来使用代理服务器。

有关所需 Docker 配置的信息,请参阅 Docker 文档中的配置 Docker 以使用代理服务器