自托管Windows代理下载AzureKeyVault@2任务遇SocketException(10054)错误
第一步:获取任务下载的URL(解决排查无方向问题)
要定位任务包的下载地址,需开启代理的诊断日志:
- 打开Windows代理安装目录下的
.env文件,添加一行:AGENT_DIAGNOSTICS=true - 或者启动代理时添加参数:
.\run.cmd --diagnostics - 重新触发流水线,在代理日志(默认路径:
_diag文件夹下的日志文件)中搜索Downloading task package,即可找到对应的下载URL,格式通常为https://vstsagentpackage.azureedge.net/agenttasks/{任务名称}/{版本}/task.zip
第二步:针对性排查与修复
1. 网络拦截排查
- 检查Windows机器的防火墙、杀毒软件:对比能正常下载的
Powershell@2任务域名,确认AzureKeyVault@2、Bash@3对应的下载域名是否被安全软件拦截,临时关闭安全软件测试是否恢复正常 - 代理服务器配置:如果Windows机器使用了企业代理,确认代理规则允许访问任务下载的域名;Linux代理可能使用了不同的代理策略,可同步Windows代理的代理配置
2. 强制启用高版本TLS
部分Windows环境默认禁用TLS 1.2/1.3,而任务下载服务器可能要求该版本,执行以下PowerShell命令后重启代理:
[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12 -bor [Net.SecurityProtocolType]::Tls13
3. 升级代理版本
当前使用的v3.x.x可能存在旧版本兼容性问题,下载最新的v3.x稳定版Windows自托管代理,替换现有代理(保留原代理目录下的.agent和.env配置文件即可,无需重新配置)
4. 手动下载验证
根据日志中的URL,在Windows机器上手动下载任务包测试:
Invoke-WebRequest -Uri "获取到的任务下载URL" -OutFile "task.zip"
- 若手动下载失败:确认网络层面的问题(如DNS解析、路由、端口限制)
- 若手动下载成功:检查代理服务的权限、缓存设置,或尝试重新注册代理
错误日志参考
System.Net.Sockets.SocketException (10054): 远程主机强制关闭了现有连接。
at System.Net.Http.ConnectHelper.EstablishSslConnectionAsyncCore(Stream stream, SslClientAuthenticationOptions sslOptions, CancellationToken cancellationToken)
at System.Net.Http.HttpConnectionPool.ConnectAsync(HttpRequestMessage request, Boolean async, CancellationToken cancellationToken)
at System.Net.Http.HttpConnectionPool.CreateHttp11ConnectionAsync(HttpRequestMessage request, Boolean async, CancellationToken cancellationToken)
at System.Net.Http.HttpConnectionPool.GetHttpConnectionAsync(HttpRequestMessage request, Boolean async, CancellationToken cancellationToken)
at System.Net.Http.HttpConnectionPool.SendWithRetryAsync(HttpRequestMessage request, Boolean async, Boolean doRequestAuth, CancellationToken cancellationToken)
at System.Net.Http.RedirectHandler.SendAsync(HttpRequestMessage request, Boolean async, CancellationToken cancellationToken)
at System.Net.Http.HttpClient.FinishSendAsyncBuffered(Task`1 sendTask, HttpRequestMessage request, CancellationTokenSource cts, Boolean disposeCts)
at Microsoft.VisualStudio.Services.Agent.Worker.TaskManager.DownloadTaskPackageAsync(TaskDefinition task, CancellationToken token)
内容的提问来源于stack exchange,提问作者Alejandro

