我在 azure devops 中有自动化测试计划。我为它们配置了代理。我启动了一个特定计划的运行,该计划在测试期间改变本地日期/时间来操作各种数据。然而,当它这样做时,代理失去联系并且运行被中止。 一旦在测试中更改日期/时间,我就看到两个错误。
一:
代理连接错误:承载在 26/06/2024 19:30:52 之前无效。当前服务器时间是 24/06/2024 19:30:51.. 正在重试,直到重新连接。
二:
日期/时间不同步,无法连接
如何解决这个问题?当然,这一定是人们确实看到的并且有解决方法吗? DevOps 操作是自托管的,而不是基于云的。代理没有作为服务运行。
问题的原因是在测试更改本地日期/时间后,Azure DevOps 服务与代理计算机时间之间的时间不匹配。
参考Agent配置代码:ConfigurationManager.cs
测试代理连接,检测任何潜在的连接问题,例如导致 OAuth 令牌过期的本地时钟偏差。
_term.WriteLine(StringUtil.Loc("TestAgentConnection"));
var credMgr = HostContext.GetService<ICredentialManager>();
VssCredentials credential = credMgr.LoadCredentials();
var agentSvr = HostContext.GetService<IAgentServer>();
try
{
await agentSvr.ConnectAsync(new Uri(agentSettings.ServerUrl), credential);
}
catch (VssOAuthTokenRequestException ex) when (ex.Message.Contains("Current server time is"))
{
// there are two exception messages server send that indicate clock skew.
// 1. The bearer token expired on {jwt.ValidTo}. Current server time is {DateTime.UtcNow}.
// 2. The bearer token is not valid until {jwt.ValidFrom}. Current server time is {DateTime.UtcNow}.
Trace.Error("Catch exception during test agent connection.");
Trace.Error(ex);
throw new InvalidOperationException(StringUtil.Loc("LocalClockSkewed"));
}
catch (SocketException ex)
{
ExceptionsUtil.HandleSocketException(ex, agentSettings.ServerUrl, Trace.Error);
throw;
}
这是 Azure DevOps Agent 中的硬连接检查。当您的本地时间与 Azure DevOps 不匹配时,会报告此错误。这是预期的行为。
Azure DevOps Agents 中恐怕暂时没有办法可以跳过这个检查。因此,更改时间的测试将不会在 Azure DevOps 中按预期运行
我们需要确保时区同步。
我完全理解您的要求。您可以在网站:开发者社区提交建议票来报告此功能。