自托管 macOS 代理 (2.x)
Azure DevOps Services | Azure DevOps Server 2022 - Azure DevOps Server 2019
重要
本文提供有关将 2.x 版代理软件与 Azure DevOps Server 和 TFS 配合使用的指导。 如果使用 Azure DevOps Services,请参阅自托管 macOS 代理。
要生成和部署 Xcode 应用或 Xamarin.iOS 项目,至少需要一个 macOS 代理。 ‘此代理还可以生成和部署 Java 与 Android 应用。
开始之前:
- 如果你的管道位于 Azure Pipelines 中,并且 Microsoft 托管代理满足你的需求,可以跳过设置自托管 macOS 代理的步骤。
- 否则,可以按照本文中所述在 macOS 上安装代理。 请继续阅读下一节。
了解代理
如果你已知道代理的定义及其工作原理,可随意跳转到下面的部分。 但是,如果你想要详细了解其作用和工作原理的更多背景信息,请参阅 Azure Pipelines 代理。
检查先决条件
确保计算机满足以下先决条件:
- macOS 10.15“Catalina”、macOS 11.0“Big Sur”或 macOS 12.0“Monterey”
- Git 2.9.0 或更高版本(强烈推荐使用最新版本 - 可以使用 Homebrew 轻松安装)
代理版本 2.125.0 及更高版本要求必须满足这些先决条件。
TFVC
如果要使用 TFVC,还需要 Oracle Java JDK 1.6 或更高版本。 (Oracle JRE 和 OpenJDK 不足以实现此目的。)
TEE 插件用于 TFVC 功能。 它有一个 EULA,如果你打算使用 TFVC,需要在配置期间接受该 EULA。
由于 TEE 插件不再会维护,并且包含一些过时的 Java 依赖项,因此从代理 2.198.0 开始,它不再包含在代理分发版中。 但是,如果要签出 TFVC 存储库,则会在签出任务执行期间下载 TEE 插件。 执行作业后,将移除 TEE 插件。
注意
注意:你可能会注意到,由于此下载机制,签出任务需要很长时间才能开始运行。
如果代理在代理或防火墙后面运行,你将需要确保访问以下网站:https://vstsagenttools.blob.core.windows.net/
。 将从此地址下载 TEE 插件。
如果你使用的是自托管代理,并且在下载 TEE 时遇到问题,可以手动安装 TEE:
- 将
DISABLE_TEE_PLUGIN_REMOVAL
环境或管道变量设置为true
。 此变量可防止代理在签出 TFVC 存储库后移除 TEE 插件。 - 从 Team Explorer Everywhere GitHub 版本手动下载 TEE-CLC 版本 14.135.0。
- 将
TEE-CLC-14.135.0
文件夹的内容提取到<agent_directory>/externals/tee
。
准备权限
如果要从 Subversion 存储库生成,必须在计算机上安装 Subversion 客户端。
第一次应手动运行代理安装程序。 了解代理的工作原理后,或者如果你想要自动设置多个代理,请考虑使用无人参与配置。
自托管代理的信息安全性
配置代理的用户需要具有池管理员权限,但运行代理的用户不需要。
由代理控制的文件夹应限制为向尽可能少的用户公开,这些文件夹包含的机密可能会被解密或泄露。
Azure Pipelines 代理是一个软件产品,旨在执行从外部源下载的代码。 它本身就可能成为远程代码执行 (RCE) 攻击的目标。
因此,请务必考虑围绕管道代理的每次单独使用来执行工作的威胁模型,并决定可以向运行代理的用户、运行代理的计算机、对管道定义具有写入访问权限的用户、对存储 yaml 的 git 存储库,或者是对控制对新管道池的访问权限的用户组授予的最低权限。
最佳做法是让运行代理的标识与具有将代理连接到池的权限的标识不同。 生成凭据(以及其他与代理相关的文件)的用户与需要读取的用户不同。 因此,仔细考虑向代理计算机本身以及包含敏感文件(如日志和项目)的代理文件夹授予的访问权限会更安全。
只向 DevOps 管理员和运行代理进程的用户标识授予对代理文件夹的访问权限是有意义的。 管理员可能需要调查文件系统,了解生成失败或获取日志文件,以便能够报告 Azure DevOps 失败。
决定要使用哪个用户
作为一个一次性的步骤,必须注册代理。 有权管理代理队列的人员必须完成这些步骤。 代理不会在日常操作中使用此人的凭据,但需要他们完成注册。 详细了解代理的通信方式。
使用个人访问令牌 (PAT) 进行身份验证
- 使用计划在 Azure DevOps Server Web 门户 (
https://{your-server}/DefaultCollection/
) 中使用的用户帐户登录。
- 使用计划在 Azure DevOps 组织 (
https://dev.azure.com/{your_organization}
) 中使用的用户帐户登录。
在主页中,打开你的个人资料。 转到安全性详细信息。
-
注意
如果你正在配置部署组代理,或者在注册 VM 环境资源时遇到错误,则必须将 PAT 范围设置为“所有可访问组织”。
在主页中,打开用户设置,然后选择“个人访问令牌”。
对于范围,选择“代理池(读取、管理)”,并确保清除所有其他框。 如果是部署组代理,对于范围,请选择“部署组(读取、管理)”并确保清除所有其他框。
选择“创建新的个人访问令牌”窗口底部的“显示所有范围”,查看范围的完整列表。
复制令牌。 当你配置代理时,将用到此令牌。
确认用户具有权限
确保你要使用的用户帐户具有注册代理的权限。
用户是 Azure DevOps 组织所有者还是 TFS 或 Azure DevOps Server 管理员? 如果到这一步,说明你拥有权限。
否则:
打开浏览器并导航到 Azure Pipelines 组织、Azure DevOps Server 或 TFS 服务器的“代理池”选项卡:
(
https://dev.azure.com/{yourorganization}
) 登录到组织。选择“Azure DevOps”、“组织设置”。
选择“代理池”。
登录到项目集合 (
http://your-server/DefaultCollection
)。选择“Azure DevOps”、“集合设置”。
选择“代理池”。
选择“Azure DevOps”、“集合设置”。
选择“代理池”。
选择页面右侧的池,然后单击“安全性”。
如果未显示要使用的用户帐户,请让管理员添加该帐户。 管理员可以是代理池管理员、Azure DevOps 组织所有者、TFS 或 Azure DevOps Server 管理员。
如果是部署组代理,管理员可以是部署组管理员、Azure DevOps 组织所有者、TFS 或 Azure DevOps Server 管理员。
可以在 Azure Pipelines 的“部署组”页上的“安全性”选项卡中将用户添加到部署组管理员角色。
注意
如果看到如下消息:“很抱歉,无法添加标识。请尝试其他标识。”表明你可能已针对组织所有者或者 TFS 或 Azure DevOps Server 管理员执行了上述步骤。 无需执行任何操作;你已具有管理代理队列的权限。
下载并配置代理
Azure Pipelines
使用已为其准备权限的帐户登录到计算机,如上所述。
在 Web 浏览器中,登录到 Azure Pipelines,并导航到“代理池”选项卡:
(
https://dev.azure.com/{yourorganization}
) 登录到组织。选择“Azure DevOps”、“组织设置”。
选择“代理池”。
登录到项目集合 (
http://your-server/DefaultCollection
)。选择“Azure DevOps”、“集合设置”。
选择“代理池”。
选择“Azure DevOps”、“集合设置”。
选择“代理池”。
选择“默认”池,选择“代理”选项卡,然后选择“新建代理”。
在“获取代理”对话框中,单击“macOS”。
单击“下载”按钮。
遵照页面上的说明操作。
清除 tar 文件上的扩展属性:
xattr -c vsts-agent-osx-x64-V.v.v.tar.gz
。将代理解压缩到所选的目录中。 通过
cd
转到该目录,运行./config.sh
。 确保目录的路径不包含空格,因为工具和脚本并不总是会正确地转义空格。
Azure DevOps Server 2019 和 Azure DevOps Server 2020
使用已为其准备权限的帐户登录到计算机,如上所述。
在 Web 浏览器中,登录到 Azure DevOps Server,并导航到“代理池”选项卡:
(
https://dev.azure.com/{yourorganization}
) 登录到组织。选择“Azure DevOps”、“组织设置”。
选择“代理池”。
登录到项目集合 (
http://your-server/DefaultCollection
)。选择“Azure DevOps”、“集合设置”。
选择“代理池”。
选择“Azure DevOps”、“集合设置”。
选择“代理池”。
单击“下载代理”。
在“获取代理”对话框中,单击“macOS”。
单击“下载”按钮。
遵照页面上的说明操作。
清除 tar 文件上的扩展属性:
xattr -c vsts-agent-osx-x64-V.v.v.tar.gz
。将代理解压缩到所选的目录中。 通过
cd
转到该目录,运行./config.sh
。 确保目录的路径不包含空格,因为工具和脚本并不总是会正确地转义空格。
服务器 URL
Azure Pipelines:https://dev.azure.com/{your-organization}
TFS 2018 及更高版本:https://{your_server}/tfs
身份验证类型
Azure Pipelines
选择“PAT”,然后将已创建的 PAT 令牌粘贴到命令提示符窗口中。
注意
使用 PAT 作为身份验证方法时,PAT 令牌仅用于代理的初始配置。 有关详细信息,请参阅与 Azure Pipelines 或 TFS 的通信。
TFS 或 Azure DevOps Server
重要
确保将服务器配置为支持要使用的身份验证方法。
当你将代理配置为连接到 TFS 时,有以下选项:
备用:使用基本身份验证连接到 TFS 或 Azure DevOps Server。 选择“备用”后,系统会提示输入凭据。
集成:在 macOS 或 Linux 上不受支持。
协商:(默认)通过 NTLM 或 Kerberos 等 Windows 身份验证方案以已登录用户以外的用户身份连接到 TFS 或 Azure DevOps Server。 选择“协商”后,系统会提示输入凭据。
PAT:仅在 Azure Pipelines 和 TFS 2017 及更高版本上受支持。 选择“PAT”后,将已创建的 PAT 令牌粘贴到命令提示符窗口中。 如果 Azure DevOps Server 或 TFS 实例和代理计算机不在受信任的域中,请使用个人访问令牌 (PAT)。 PAT 身份验证由 Azure DevOps Server 或 TFS 实例处理,而不是由域控制器处理。
注意
使用 PAT 作为身份验证方法时,PAT 令牌仅用于 Azure DevOps Server 和更高版本的 TFS 上代理的初始配置。 有关详细信息,请参阅与 Azure Pipelines 或 TFS 的通信。
以交互方式运行
有关是要以交互模式还是以服务形式运行代理的指导,请参阅代理:交互与服务。
若要以交互方式运行代理,请执行以下步骤:
如果一直将代理作为服务来运行,请卸载服务。
运行代理。
./run.sh
若要重启代理,请按 Ctrl+C,然后运行 run.sh
以重启代理。
若要使用代理,请使用代理池运行作业。 如果你没有选择其他池,代理将位于“默认”池中。
运行一次
对于配置为以交互方式运行的代理,可以选择让代理仅接受一个作业。 在此配置中运行:
./run.sh --once
此模式下的代理将仅接受一个作业,然后正常关闭(在诸如 Azure 容器实例的服务上运行时很有用)。
作为启动的服务运行
我们提供 ./svc.sh
脚本,以便以启动的 LaunchAgent 服务的形式运行和管理代理。 当你配置代理后,将生成此脚本。 该服务有权访问 UI 以运行 UI 测试。
注意
如果你更喜欢其他方法,也可以使用你喜欢的任何类型的服务机制。 请参阅服务文件。
令牌
在以下部分中,这些令牌将被替换:
{agent-name}
{tfs-name}
举个例子,你已使用 our-osx-agent
名称配置了一个代理(如上文所述)。 在以下示例中,{tfs-name}
将为:
Azure Pipelines:组织的名称。 例如,如果连接到
https://dev.azure.com/fabrikam
,服务名称将为vsts.agent.fabrikam.our-osx-agent
TFS:本地 TFS AT 服务器的名称。 例如,如果连接到
http://our-server:8080/tfs
,服务名称将为vsts.agent.our-server.our-osx-agent
命令
更改到代理目录
例如,如果你在主目录的 myagent
子文件夹中进行了安装:
cd ~/myagent$
安装
命令:
./svc.sh install
此命令创建指向 ./runsvc.sh
的 launchd plist。 此脚本设置环境(下面有更多详细信息),并启动代理主机。
开始
命令:
./svc.sh start
输出:
starting vsts.agent.{tfs-name}.{agent-name}
status vsts.agent.{tfs-name}.{agent-name}:
/Users/{your-name}/Library/LaunchAgents/vsts.agent.{tfs-name}.{agent-name}.plist
Started:
13472 0 vsts.agent.{tfs-name}.{agent-name}
如果服务正在运行,则左侧数字为 pid。 如果第二个数字不为零,则表示出现问题。
状态
命令:
./svc.sh status
输出:
status vsts.agent.{tfs-name}.{agent-name}:
/Users/{your-name}/Library/LaunchAgents/vsts.{tfs-name}.{agent-name}.testsvc.plist
Started:
13472 0 vsts.agent.{tfs-name}.{agent-name}
如果服务正在运行,则左侧数字为 pid。 如果第二个数字不为零,则表示出现问题。
停止
命令:
./svc.sh stop
输出:
stopping vsts.agent.{tfs-name}.{agent-name}
status vsts.agent.{tfs-name}.{agent-name}:
/Users/{your-name}/Library/LaunchAgents/vsts.{tfs-name}.{agent-name}.testsvc.plist
Stopped
卸载
在卸载前应先停止。
命令:
./svc.sh uninstall
自动登录和锁定
通常,代理服务只有在用户登录后才会运行。 如果希望代理服务在计算机重启后自动启动,可以将计算机配置为在启动时自动登录并锁定。 请参阅将 Mac 设置为在启动期间自动登录 - Apple 支持。
注意
有关详细信息,请参阅 Terminally Geeky:更安全地使用自动登录博客。 这篇博客中提到的 .plist 文件可能无法在源中获取,但可在此处找到一个副本:Lifehacker - 使 OS X 在登录之前加载桌面。
更新环境变量
当你配置服务时,它会为当前登录用户创建一些有用的环境变量的快照,例如 PATH、LANG、JAVA_HOME、ANT_HOME 和 MYSQL_PATH。 如果需要更新变量(例如,在安装一些新软件后),可以运行以下命令:
./env.sh
./svc.sh stop
./svc.sh start
环境变量的快照存储在代理根目录下的 .env
文件中,你也可以直接更改该文件以应用环境变量更改。
在服务启动之前运行指令
你也可以运行自己的指令和命令,以在服务启动时运行。 例如,可以设置环境或调用脚本。
编辑
runsvc.sh
。将以下行替换为你的指令:
# insert anything to setup env when running as a service
服务文件
当你安装服务时,会放置一些服务文件。
.plist 服务文件
将创建 .plist 服务文件:
~/Library/LaunchAgents/vsts.agent.{tfs-name}.{agent-name}.plist
例如:
~/Library/LaunchAgents/vsts.agent.fabrikam.our-osx-agent.plist
sudo ./svc.sh install
从以下模板生成此文件:./bin/vsts.agent.plist.template
.service 文件
./svc.sh start
通过读取 .service
文件来查找服务,该文件包含上面所述的 plist 服务文件的路径。
备用服务机制
我们提供 ./svc.sh
脚本,以便于用户以 launchd LaunchAgent 服务的形式运行和管理代理。 但也可以使用首选的任何类型的服务机制。
可以使用上面所述的模板来帮助生成其他类型的服务文件。 例如,如果不需要 UI 测试且不想配置自动登录和锁定,请修改模板以生成作为启动守护程序运行的服务。 请参阅 Apple 开发人员库:创建启动守护程序和代理。
替换代理
若要替换代理,请再次按照“下载并配置代理”步骤操作。
如果使用与现有代理相同的名称来配置代理,系统会询问是否要替换现有代理。 如果回答是 Y
,请确保移除要替换的代理(见下文)。 否则,在几分钟的冲突之后,其中一个代理将关闭。
移除并重新配置代理
若要删除该代理,请执行以下操作:
按上文所述停止并卸载服务。
移除代理。
./config.sh remove
输入凭据。
移除代理后,可以再次配置代理。
无人参与配置
可以从脚本设置代理,无需人工干预。
必须传递 --unattended
和所有问题的答案。
若要配置代理,它必须知道组织的 URL,或者知道有权设置代理的人员的集合和凭据。
所有其他响应都是可选的。
可以改用环境变量指定任何命令行参数:对名称使用大写形式,并在前面加上 VSTS_AGENT_INPUT_
。
例如,VSTS_AGENT_INPUT_PASSWORD
,而不是指定 --password
。
必需选项
--unattended
- 代理设置不会提示输入信息,必须在命令行上提供所有设置--url <url>
- 服务器的 URL。 例如:https://dev.azure.com/myorganization 或 http://my-azure-devops-server:8080/tfs--auth <type>
- 身份验证类型。 有效值是:pat
(个人访问令牌)- PAT 是唯一适用于 Azure DevOps Services 的方案。negotiate
(Kerberos 或 NTLM)alt
(基本身份验证)integrated
(Windows 默认凭据)
身份验证选项
- 如果选择
--auth pat
:--token <token>
- 指定个人访问令牌- PAT 是唯一适用于 Azure DevOps Services 的方案。
- 如果选择
--auth negotiate
或--auth alt
:--userName <userName>
- 以domain\userName
或userName@domain.com
格式指定 Windows 用户名--password <password>
- 指定密码
池和代理名称
--pool <pool>
- 代理要加入的池名称--agent <agent>
- 代理名称--replace
- 替换池中的代理。 如果另一个代理以同一名称侦听,它将开始由于冲突而失败
代理安装
--work <workDirectory>
- 存储作业数据的工作目录。 默认为代理目录的根目录下的_work
。 工作目录归指定的代理所有,不应在多个代理之间共享。--acceptTeeEula
- 接受 Team Explorer Everywhere 最终用户许可协议(仅适用于 macOS 和 Linux)--disableloguploads
- 不将控制台日志输出流式传输或发送到服务器。 相反,可以在作业完成后从代理主机的文件系统中进行检索。
仅 Windows 启动
--runAsService
- 将代理配置为作为 Windows 服务运行(需要管理员权限)--runAsAutoLogon
- 配置自动登录并在启动时运行代理(需要管理员权限)--windowsLogonAccount <account>
- 与--runAsService
或--runAsAutoLogon
搭配使用,以domain\userName
或userName@domain.com
格式指定 Windows 用户名--windowsLogonPassword <password>
- 与--runAsService
或--runAsAutoLogon
搭配使用,指定 Windows 登录密码(组托管服务帐户和 Windows 内置帐户则不需要,如“NT AUTHORITY\NETWORK SERVICE”)--overwriteAutoLogon
- 与--runAsAutoLogon
搭配使用,覆盖计算机上的现有自动登录--noRestart
- 与--runAsAutoLogon
搭配使用,在代理配置完成后使主机停止重启
使用 runAsAutoLogon
选项配置代理的故障排除
使用 runAsAutoLogon
选项配置代理,会在每次重启计算机后运行代理。
如果重启计算机后代理没有运行,请执行后续步骤。
如果已在计算机上配置代理
在重新配置代理之前,必须移除旧的代理配置,因此请尝试从代理文件夹运行以下命令:
.\config.cmd remove --auth 'PAT' --token '<token>'
执行命令后,检查代理是否已从代理池中移除:
<Azure DevOps organization> / <Project> / Settings / Agent pools / <Agent Pool> / Agents
如果运行命令未能将代理从代理池中移除,请手动进行移除。
然后,尝试从代理文件夹运行以下命令,重新配置代理:
.\config.cmd --unattended --agent '<agent-name>' --pool '<agent-pool-name>' --url '<azure-dev-ops-organization-url>' --auth 'PAT' --token '<token>' --runAsAutoLogon --windowsLogonAccount '<domain\user-name>' --windowsLogonPassword '<windows-password>'
指定代理名称(任何特定的唯一名称),并在重新配置后检查此代理是否出现在代理池中。
最好解压缩代理存档(可在此处下载),并从新的解压缩代理文件夹运行此命令。
检查是否正确记录并保存了 Windows 注册表项
运行 whoami /user
命令以获取 <sid>
。 打开 Registry Editor
并遵循以下路径:
Computer\HKEY_USERS\<sid>\SOFTWARE\Microsoft\Windows\CurrentVersion\Run
检查是否存在 VSTSAgent
键。 如果此键存在,请将其删除,然后关闭 Registry Editor
,并通过从代理文件夹运行 .\config.cmd
命令(没有参数)来配置代理。 在回答 Enter Restart the machine at a later time?
问题之前,请再次打开 Registry Editor
,检查 VSTSAgent
键是否已出现。 按下 Enter
回答问题,并在重启计算机后检查 VSTSAgent
键是否仍在原处。
检查 Windows 注册表项是否在计算机上正常工作
创建一个包含以下行的 autorun.cmd
文件:echo "Hello from AutoRun!"
。
打开 Registry Editor
,并在上方的路径中使用 AutoRun
键和值创建一个新的键值对
C:\windows\system32\cmd.exe /D /S /C start "AutoRun" "D:\path\to\autorun.cmd"
重启计算机。 如果看不到显示 Hello from AutoRun!
消息的控制台窗口,表明 Windows 注册表项出现问题。
仅部署组
--deploymentGroup
- 将代理配置为部署组代理--deploymentGroupName <name>
- 与--deploymentGroup
搭配使用,指定代理要加入的部署组--projectName <name>
- 与--deploymentGroup
搭配使用,设置项目名称--addDeploymentGroupTags
- 与--deploymentGroup
搭配使用,指示应添加部署组标记--deploymentGroupTags <tags>
- 与--addDeploymentGroupTags
搭配使用,指定以逗号分隔的部署组代理标记列表,例如“web, db”
仅环境
--addvirtualmachineresourcetags
- 用于指示应添加环境资源标记--virtualmachineresourcetags <tags>
- 与--addvirtualmachineresourcetags
搭配使用,指定以逗号分隔的环境资源代理标记列表,例如“web, db”
./config.sh --help
始终列出最新的必需响应和可选响应。
诊断
如果你的自托管代理出现问题,可以尝试运行诊断。 配置代理后:
./run.sh --diagnostics
这将运行诊断套件,它可以帮助你排查问题。 诊断功能从代理版本 2.165.0 开始提供。
有关其他选项的帮助
若要了解其他选项,请运行以下命令:
./config.sh --help
帮助内容提供了有关身份验证备选方案和无人参与的配置的信息。
功能
代理的功能已编目并播发到池中,因此只会为代理分配它可以处理的生成和发布。 请参阅生成和发布代理功能。
在许多情况下,在部署代理后,需要安装软件或实用工具。 一般情况下,你在开发计算机上使用的任何软件和工具也应该在代理上安装。
例如,如果你的生成包含 npm 任务,则除非池中具有安装了 npm 的生成代理,否则该生成不会运行。
重要
功能包括所有环境变量,以及当代理运行时设置的值。 如果在代理运行时其中的任何一个值发生更改,则必须重启代理以拾取新值。 在代理上安装新软件后,必须重启代理才能使新功能显示在池中,以便生成可以运行。
如果你想要排除用作功能的环境变量,可以通过设置环境变量 VSO_AGENT_IGNORE
并提供以逗号分隔的要忽略的变量列表来指定这些变量。
常见问题解答
如何确保我使用的是最新的代理版本?
导航到“代理池”选项卡:
(
https://dev.azure.com/{yourorganization}
) 登录到组织。选择“Azure DevOps”、“组织设置”。
选择“代理池”。
登录到项目集合 (
http://your-server/DefaultCollection
)。选择“Azure DevOps”、“集合设置”。
选择“代理池”。
选择“Azure DevOps”、“集合设置”。
选择“代理池”。
单击包含代理的池。
确保已启用代理。
导航到“功能”选项卡:
从“代理池”选项卡中,选择所需的代理池。
选择“代理”,然后选择所需的代理。
选择“功能”选项卡。
注意
Microsoft 托管的代理不显示系统功能。 有关 Microsoft 托管代理上安装的软件的列表,请参阅使用 Microsoft 托管代理。
从“代理池”选项卡中,选择所需的池。
选择“代理”,然后选择所需的代理。
选择“功能”选项卡。
从“代理池”选项卡中,选择所需的池。
选择“代理”,然后选择所需的代理。
选择“功能”选项卡。
查找
Agent.Version
功能。 可以针对最新发布的代理版本检查此值。 请参阅 Azure Pipelines 代理,并检查页面上列出的最高版本号。每个代理在运行需要较高版本的代理的任务时,都会自动自行更新。 如果要手动更新某些代理,请右键单击池,然后选择“更新所有代理”。
是否可以更新属于 Azure DevOps Server 池的代理?
是。 从 Azure DevOps Server 2019 开始,可以将服务器配置为在本地磁盘上查找代理包文件。 此配置将替代服务器在发布时附带的默认版本。 当服务器无权访问 Internet 时,此方案也适用。
在可以访问 Internet 的计算机上,从 Azure Pipelines 代理 GitHub 版本页下载代理包文件(.zip 或 .tar.gz 格式)的最新版本。
使用所选方法(如 U 盘、网络传输等)将下载的包文件传输到每个 Azure DevOps Server 应用层。 将代理文件放到以下文件夹下:
- Windows:
%ProgramData%\Microsoft\Azure DevOps\Agents
- Linux:
usr/share/Microsoft/Azure DevOps/Agents
- macOS:
usr/share/Microsoft/Azure DevOps/Agents
创建 Agents 文件夹(如果不存在)。
- 你已完成所有设置! 现在,只要更新代理,Azure DevOps Server 都将使用本地文件。 每个代理在运行需要较高版本的代理的任务时,都会自动自行更新。 但是,如果要手动更新某些代理,请右键单击池,然后选择“更新所有代理”。
如何确保我使用的是最新的 v2 代理版本?
导航到“代理池”选项卡:
(
https://dev.azure.com/{yourorganization}
) 登录到组织。选择“Azure DevOps”、“组织设置”。
选择“代理池”。
登录到项目集合 (
http://your-server/DefaultCollection
)。选择“Azure DevOps”、“集合设置”。
选择“代理池”。
选择“Azure DevOps”、“集合设置”。
选择“代理池”。
单击包含代理的池。
确保已启用代理。
导航到“功能”选项卡:
从“代理池”选项卡中,选择所需的代理池。
选择“代理”,然后选择所需的代理。
选择“功能”选项卡。
注意
Microsoft 托管的代理不显示系统功能。 有关 Microsoft 托管代理上安装的软件的列表,请参阅使用 Microsoft 托管代理。
从“代理池”选项卡中,选择所需的池。
选择“代理”,然后选择所需的代理。
选择“功能”选项卡。
从“代理池”选项卡中,选择所需的池。
选择“代理”,然后选择所需的代理。
选择“功能”选项卡。
查找
Agent.Version
功能。 可以针对最新发布的代理版本检查此值。 请参阅 Azure Pipelines 代理,并检查页面上列出的最高版本号。每个代理在运行需要较高版本的代理的任务时,都会自动自行更新。 如果要手动更新某些代理,请右键单击池,然后选择“更新所有代理”。
是否可以更新属于 Azure DevOps Server 池的 v2 代理?
是。 从 Azure DevOps Server 2019 开始,可以将服务器配置为在本地磁盘上查找代理包文件。 此配置将替代服务器在发布时附带的默认版本。 当服务器无权访问 Internet 时,此方案也适用。
在可以访问 Internet 的计算机上,从 Azure Pipelines 代理 GitHub 版本页下载代理包文件(.zip 或 .tar.gz 格式)的最新版本。
使用所选方法(如 U 盘、网络传输等)将下载的包文件传输到每个 Azure DevOps Server 应用层。 将代理文件放在
%ProgramData%\Microsoft\Azure DevOps\Agents
文件夹下。 创建 Agents 文件夹(如果不存在)。你已完成所有设置! 现在,只要更新代理,Azure DevOps Server 都将使用本地文件。 每个代理在运行需要较高版本的代理的任务时,都会自动自行更新。 但是,如果要手动更新某些代理,请右键单击池,然后选择“更新所有代理”。
可以在哪里详细了解 launchd 服务的工作方式?
我正在运行防火墙,我的代码在 Azure Repos 中。 代理需要与哪些 URL 通信?
如果正在防火墙后面的安全网络中运行代理,请确保代理可以启动与以下 URL 和 IP 地址的通信。
域 URL | 说明 |
---|---|
https://{organization_name}.pkgs.visualstudio.com |
适用于使用 {organization_name}.visualstudio.com 域的组织的 Azure DevOps 打包 API |
https://{organization_name}.visualstudio.com |
适用于使用 {organization_name}.visualstudio.com 域的组织 |
https://{organization_name}.vsblob.visualstudio.com |
适用于使用 {organization_name}.visualstudio.com 域的组织的 Azure DevOps 遥测 |
https://{organization_name}.vsrm.visualstudio.com |
适用于使用 {organization_name}.visualstudio.com 域的组织的发布管理服务 |
https://{organization_name}.vssps.visualstudio.com |
适用于使用 {organization_name}.visualstudio.com 域的组织的 Azure DevOps 平台服务 |
https://{organization_name}.vstmr.visualstudio.com |
适用于使用 {organization_name}.visualstudio.com 域的组织的 Azure DevOps 测试管理服务 |
https://*.blob.core.windows.net |
Azure Artifacts |
https://*.dev.azure.com |
适用于使用 dev.azure.com 域的组织 |
https://*.vsassets.io |
通过 CDN 的 Azure Artifacts |
https://*.vsblob.visualstudio.com |
适用于使用 dev.azure.com 域的组织的 Azure DevOps 遥测 |
https://*.vssps.visualstudio.com |
适用于使用 dev.azure.com 域的组织的 Azure DevOps 平台服务 |
https://*.vstmr.visualstudio.com |
适用于使用 dev.azure.com 域的组织的 Azure DevOps 测试管理服务 |
https://app.vssps.visualstudio.com |
适用于使用 {organization_name}.visualstudio.com 域的组织 |
https://dev.azure.com |
适用于使用 dev.azure.com 域的组织 |
https://login.microsoftonline.com |
Microsoft Entra 登录日志 |
https://management.core.windows.net |
Azure 管理 API |
https://vstsagentpackage.azureedge.net |
代理包 |
若要确保你的组织使用任何现有的防火墙或 IP 限制,请确认 dev.azure.com
和 *dev.azure.com
已打开,并更新允许列出的 IP,以包括以下 IP 地址,具体取决于你的 IP 版本。 如果当前允许列出 13.107.6.183
和 13.107.9.183
IP 地址,请予以保留,因为不需要移除它们。
IPv4 范围
13.107.6.0/24
13.107.9.0/24
13.107.42.0/24
13.107.43.0/24
IPv6 范围
2620:1ec:4::/48
2620:1ec:a92::/48
2620:1ec:21::/48
2620:1ec:22::/48
注意
有关允许的地址的详细信息,请参阅允许的地址列表和网络连接。
如何使用自签名证书运行代理?
如何在 Web 代理后面运行代理?
如何重启代理
如果是以交互方式运行代理,请参阅以交互方式运行中的重启说明。 如果是将代理作为服务来运行,请按照停止步骤操作,然后启动代理。
如何配置代理以绕过 Web 代理并连接到 Azure Pipelines?
如果希望代理绕过代理并直接连接到 Azure Pipelines,应配置 Web 代理,使代理能够访问以下 URL。
对于使用 *.visualstudio.com
域的组织:
https://login.microsoftonline.com
https://app.vssps.visualstudio.com
https://{organization_name}.visualstudio.com
https://{organization_name}.vsrm.visualstudio.com
https://{organization_name}.vstmr.visualstudio.com
https://{organization_name}.pkgs.visualstudio.com
https://{organization_name}.vssps.visualstudio.com
对于使用 dev.azure.com
域的组织:
https://dev.azure.com
https://*.dev.azure.com
https://login.microsoftonline.com
https://management.core.windows.net
https://vstsagentpackage.azureedge.net
https://vssps.dev.azure.com
若要确保你的组织使用任何现有的防火墙或 IP 限制,请确认 dev.azure.com
和 *dev.azure.com
已打开,并更新允许列出的 IP,以包括以下 IP 地址,具体取决于你的 IP 版本。 如果当前允许列出 13.107.6.183
和 13.107.9.183
IP 地址,请予以保留,因为不需要移除它们。
IPv4 范围
13.107.6.0/24
13.107.9.0/24
13.107.42.0/24
13.107.43.0/24
IPv6 范围
2620:1ec:4::/48
2620:1ec:a92::/48
2620:1ec:21::/48
2620:1ec:22::/48
注意
此过程使代理能够绕过 Web 代理。 对于在生成中运行的每个任务和工具,生成管道和脚本仍必须处理绕过 Web 代理的过程。
例如,如果使用 NuGet 任务,必须将 Web 代理配置为支持绕过托管正在使用的 NuGet 源的服务器的 URL。
我正在使用 TFS,上述部分中的 URL 对我不起作用。 在哪里可以获得帮助?
我在本地使用 TFS,但没有看到其中某些功能。 为什么看不到?
其中某些功能仅在 Azure Pipelines 上可用,在本地尚不可用。 如果你已升级到最新版本的 TFS,则可在本地使用这些功能。
反馈
https://aka.ms/ContentUserFeedback。
即将发布:在整个 2024 年,我们将逐步淘汰作为内容反馈机制的“GitHub 问题”,并将其取代为新的反馈系统。 有关详细信息,请参阅:提交和查看相关反馈