如何手动更新Azure DevOps自托管代理?更新遇连接超时错误
Azure DevOps自托管代理UI自动更新失败(下载超时)的解决方案
问题描述
通过Azure DevOps Web门户触发自托管代理自动更新时,出现连接超时错误,日志显示无法从Azure CDN地址下载代理安装包。但手动下载、使用PowerShell命令Invoke-WebRequest或System.Net.WebClient下载均能成功获取包文件,手动将下载好的agent1.zip放入C:\agent_work_update目录也无法触发更新流程。
错误日志
[2023-01-22 08:49:33Z INFO Agent] 收到刷新消息,启动自更新后台进程。 [2023-01-22 08:49:34Z INFO SelfUpdater] 服务器上有可用的'agents'包版本'2.214.1'。 [2023-01-22 08:49:34Z INFO SelfUpdater] 当前运行的代理版本为2.213.2 [2023-01-22 08:49:34Z INFO SelfUpdater] 有可用更新。 [2023-01-22 08:49:34Z INFO Terminal] 输出:代理更新进行中,请勿关闭代理。 [2023-01-22 08:49:34Z INFO Terminal] 输出:正在下载2.214.1版本代理 [2023-01-22 08:49:34Z INFO HostContext] 已知目录'Bin':'C:\agent\bin' [2023-01-22 08:49:34Z INFO HostContext] 已知目录'Root':'C:\agent' [2023-01-22 08:49:34Z INFO HostContext] 已知目录'Work':'C:\agent_work' [2023-01-22 08:49:34Z INFO SelfUpdater] 第1次尝试:将最新代理保存到C:\agent_work_update\agent1.zip。 [2023-01-22 08:49:34Z INFO SelfUpdater] 下载代理:开始下载 [2023-01-22 08:49:55Z WARN SelfUpdater] 无法从'https://vstsagentpackage.azureedge.net/agent/2.214.1/vsts-agent-win-x64-2.214.1.zip'获取包'C:\agent_work_update\agent1.zip'。异常信息:System.Net.Http.HttpRequestException: 连接尝试失败,因为连接方在一段时间后未正确响应,或者已建立的连接失败,因为连接的主机未能响应。 System.Net.Sockets.SocketException (10060): 连接尝试失败,因为连接方在一段时间后未正确响应,或者已建立的连接失败,因为连接的主机未能响应。 at System.Net.Http.ConnectHelper.ConnectAsync(String host, Int32 port, CancellationToken cancellationToken) 内部异常堆栈跟踪结束 --- at System.Net.Http.ConnectHelper.ConnectAsync(String host, Int32 port, CancellationToken cancellationToken) at System.Net.Http.HttpConnectionPool.ConnectAsync(HttpRequestMessage request, Boolean allowHttp2, CancellationToken cancellationToken) at System.Net.Http.HttpConnectionPool.CreateHttp11ConnectionAsync(HttpRequestMessage request, CancellationToken cancellationToken) at System.Net.Http.HttpConnectionPool.GetHttpConnectionAsync(HttpRequestMessage request, CancellationToken cancellationToken) at System.Net.Http.HttpConnectionPool.SendWithRetryAsync(HttpRequestMessage request, Boolean doRequestAuth, CancellationToken cancellationToken) at System.Net.Http.RedirectHandler.SendAsync(HttpRequestMessage request, CancellationToken cancellationToken) at System.Net.Http.HttpClient.FinishSendAsyncUnbuffered(Task`1 sendTask, HttpRequestMessage request, CancellationTokenSource cts, Boolean disposeCts) at System.Net.Http.HttpClient.FinishGetStreamAsync(Task`1 getTask) at Microsoft.VisualStudio.Services.Agent.Listener.SelfUpdater.DownloadLatestAgent(CancellationToken token) [2023-01-22 08:49:55Z INFO SelfUpdater] 第2次尝试:将最新代理保存到C:\agent_work_update\agent1.zip。
已尝试的操作
- 手动下载安装包:成功
- 将下载的文件放入
C:\agent_work_update\agent1.zip:无效 - 使用PowerShell命令
Invoke-WebRequest "https://vstsagentpackage.azureedge.net/agent/2.214.1/vsts-agent-win-x64-2.214.1.zip" -OutFile "C:\Windows\Temp\archive.zip"下载:成功 - 使用PowerShell命令
(New-Object System.Net.WebClient).DownloadFile("https://vstsagentpackage.azureedge.net/agent/2.214.1/vsts-agent-win-x64-2.214.1.zip", "C:\Windows\Temp\archive1.zip")下载:成功
解决方案
1. 手动覆盖代理文件完成更新
这是最直接的解决方法,跳过自动更新流程:
- 停止代理服务:打开服务管理器,找到
Azure Pipelines Agent服务并停止;或执行命令:net stop "Azure Pipelines Agent" - 下载并解压代理包:手动下载对应版本的代理包,解压到临时目录
- 替换代理文件:备份原代理目录(默认
C:\agent),将解压后的新代理文件覆盖到原目录 - 启动代理服务:
net start "Azure Pipelines Agent" - 验证版本:进入代理目录,执行:
确认版本已更新至目标版本.\config.cmd --version
2. 调整代理的网络超时配置
自动更新失败可能是因为代理内置的HttpClient超时时间过短,可通过修改配置延长超时:
- 编辑代理目录下的
config.json文件,添加或更新以下配置项:
({ "httpTimeout": "600", "httpRetryCount": "5", "httpRetryInterval": "10" }httpTimeout单位为秒,上述配置将超时设置为10分钟) - 保存文件后重启代理服务,再次尝试UI触发自动更新
3. 检查代理服务的运行权限与网络配置
- 确认代理服务运行的账户和手动下载时使用的账户具有相同的网络访问权限,部分环境下服务账户可能未配置用户级的代理设置
- 若网络环境需要通过代理访问外网,检查代理服务账户的环境变量是否配置了
HTTP_PROXY和HTTPS_PROXY,确保与手动下载时的配置一致
内容的提问来源于stack exchange,提问作者galsi
相关产品推荐
相关产品推荐

