You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Azure DevOps自托管代理修改系统时间后断开连接问题求助

解决Azure DevOps自托管代理因测试修改时间断连的问题

核心问题根源

你的测试修改代理所在机器的系统时间后,打破了代理与Azure DevOps Server的时间同步。Azure DevOps的身份验证Bearer Token包含生效(nbf)和过期(exp)时间戳,当代理机器时间与服务器时间差超过Token的时间校验阈值时,服务器会拒绝代理的连接请求,从而出现你遇到的两类错误。

可行的Workaround

以下是几种实用解决方法,按推荐优先级排序:

1. 在隔离环境中运行测试(最优方案)

将测试放在Docker容器或虚拟机中执行,修改的是隔离环境内的时间,完全不会影响宿主机上的代理时间:

  • 把测试代码、依赖打包成Docker镜像,在代理所在机器上启动容器时,通过参数修改容器内时间(比如Docker的--env TZ或直接在容器内执行date命令)
  • 测试完成后销毁容器,宿主机时间始终与Azure DevOps Server保持同步,代理连接不会中断

2. 测试前后强制恢复系统时间

在测试脚本中加入时间记录与强制恢复的逻辑,确保测试结束后立即将时间还原到修改前的状态,让代理快速恢复与服务器的时间同步:

# 记录当前系统时间
$originalDateTime = Get-Date

try {
    # 执行测试所需的时间修改操作
    Set-Date -Date "2024-06-24 19:30:51"
    # 运行自动化测试
    & "C:\Path\To\Your\TestRunner.exe"
}
finally {
    # 无论测试成功/失败,强制恢复原始时间
    Set-Date -Date $originalDateTime
}

代理会自动重试连接,时间恢复后几秒内即可重新建立会话。

3. 限制时间修改的范围

如果测试不需要大幅调整时间(比如跨天),尽量将时间修改控制在10分钟以内。Azure DevOps的Bearer Token有效期通常为1小时左右,时间差在这个范围内时,Token的时间校验不会触发拒绝逻辑,代理连接不会中断。

4. 临时调整代理运行流程(备选)

因为你的代理不是以服务形式运行,可将测试任务拆分为三个独立步骤:

  • 步骤1:手动终止代理进程(或执行.\agent\run.cmd的终止命令)
  • 步骤2:执行修改时间的测试脚本
  • 步骤3:恢复系统时间后,重新启动代理.\agent\run.cmd
    注意:此方法需要手动或通过外部脚本触发,不适合完全自动化的测试计划。

不推荐的方案

不要尝试修改Azure DevOps Server的时间校验宽松度,这会降低系统的安全性,可能导致身份验证绕过等风险。

内容的提问来源于stack exchange,提问作者Endorium

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.21 23:15:11