Build created in TFS 2017 fails to clone Git repository created on another TFS 2017 server with error: Too many redirects or authentication replays
Build created in TFS 2017 fails to clone Git repository created on another TFS 2017 server with error: Too many redirects or authentication replays
我有两个预置 TFS 2017 更新 1 安装。
TFS1:位于我公司内网。只有我们的开发人员可以访问它。
TFS2:它位于 public 互联网上。这适用于为我们推送代码的外部提供商和供应商。
TFS1 可以连接到 TFS2,反之亦然。
我在 TFS2 (HTTPS) 中有一个 Git 存储库。
我可以从 Intranet 克隆存储库。使用来自 TFS2 的正确凭据,我可以毫无问题地拉取和推送代码。我正在使用在 TFS2 上本地创建的帐户。
我在 TFS1 中创建了一个从外部 TFS2 获取的构建。我使用我在开发环境中使用的相同凭据创建了一个新的服务端点(外部 Git)。
构建失败并出现以下错误:
2017-05-18T22:34:28.2542280Z Syncing repository: Header TfsGit external (Git)
2017-05-18T22:34:28.3323346Z Starting clone
2017-05-18T22:34:40.3485989Z ##[error]LibGit2Sharp.LibGit2SharpException: Too many redirects or authentication replays
2017-05-18T22:34:40.3485989Z ##[error] at LibGit2Sharp.Core.Ensure.HandleError(Int32 result)
2017-05-18T22:34:40.3485989Z ##[error] at LibGit2Sharp.Core.Proxy.git_clone(String url, String workdir, GitCloneOptions& opts)
2017-05-18T22:34:40.3642360Z ##[error] at LibGit2Sharp.Repository.Clone(String sourceUrl, String workdirPath, CloneOptions options)
2017-05-18T22:34:40.3642360Z ##[error] at Microsoft.TeamFoundation.DistributedTask.Task.Internal.Core.GitHelper.CloneRepository(String repositoryPath, Uri repositoryUrl, Boolean checkoutSubmodules, String username, String password)
2017-05-18T22:34:40.3642360Z ##[error] at Microsoft.TeamFoundation.DistributedTask.Task.Internal.Core.GitHelper.SyncRepository(Uri repositoryUrl, String rootPath, Boolean cleanRepository, Boolean checkoutSubmodules, String sourceVersion, String username, String password)
2017-05-18T22:34:40.3642360Z ##[error] at Microsoft.TeamFoundation.DistributedTask.Task.Internal.Core.GitHelper.SyncRepository(ITaskEndpoint endpoint, String rootPath, Boolean cleanRepository, Boolean checkoutSubmodules, String sourceVersion)
2017-05-18T22:34:40.3642360Z ##[error] at Microsoft.TeamFoundation.DistributedTask.Task.Internal.Core.GitHelper.SyncAndCheckout(Boolean cleanRepository, String sourceBranch, String sourceVersion, Boolean checkoutSubmodules, CancellationToken cancellationToken)
2017-05-18T22:34:40.3642360Z ##[error] at Microsoft.TeamFoundation.DistributedTask.Plugin.Build.GitSourceProvider.<>c__DisplayClass3_0.<PrepareRepositoryAsync>b__0()
我在 Jenkins 中创建了一个构建,它成功地获取了 Git 存储库。
我尝试了一些在网上找到的解决方案。我在 TFS2(IIS 服务器)上启用了基本身份验证,我在 TFS2 中尝试了两种身份验证模式:NTLM 和协商。
如何在使用位于另一个 TFS 服务器上的存储库的 TFS 中进行构建?
我认为您应该从问题的第 3 行开始:"TFS1 can connect to TFS2 but no viceversa." 错误消息表明身份验证失败,所以听起来 TFS1 上的构建在定义中有一些组件,其中 TFS2 正在为TFS1。至于这可能是什么,我的第一个想法是尝试在单个构建中混合(我假设)TFS1 的 AD 和非 AD 用户可能会导致著名的 'undocumented feature'。我是网络基础设施的新手,所以如果我离得很远,请保持温柔。希望它至少能为您带来一些其他的想法。
编辑 因为它在 Jenkins 中有效,所以更可能与 IIS 相关。
好的,问题已解决。
我们使用一年多前为 TFS 2015 平台安装的 TFS 代理。我们删除并安装了最新版本的 TFS 代理 (https://go.microsoft.com/fwlink/?linkid=842100)
配置需要一段时间,我不得不应用针对此 link 建议的修复:https://github.com/Microsoft/vsts-agent/issues/759
底线,如果使用 TFS 2017,请使用最新版本的 TFS 代理。
我有两个预置 TFS 2017 更新 1 安装。
TFS1:位于我公司内网。只有我们的开发人员可以访问它。
TFS2:它位于 public 互联网上。这适用于为我们推送代码的外部提供商和供应商。
TFS1 可以连接到 TFS2,反之亦然。
我在 TFS2 (HTTPS) 中有一个 Git 存储库。
我可以从 Intranet 克隆存储库。使用来自 TFS2 的正确凭据,我可以毫无问题地拉取和推送代码。我正在使用在 TFS2 上本地创建的帐户。
我在 TFS1 中创建了一个从外部 TFS2 获取的构建。我使用我在开发环境中使用的相同凭据创建了一个新的服务端点(外部 Git)。
构建失败并出现以下错误:
2017-05-18T22:34:28.2542280Z Syncing repository: Header TfsGit external (Git)
2017-05-18T22:34:28.3323346Z Starting clone
2017-05-18T22:34:40.3485989Z ##[error]LibGit2Sharp.LibGit2SharpException: Too many redirects or authentication replays
2017-05-18T22:34:40.3485989Z ##[error] at LibGit2Sharp.Core.Ensure.HandleError(Int32 result)
2017-05-18T22:34:40.3485989Z ##[error] at LibGit2Sharp.Core.Proxy.git_clone(String url, String workdir, GitCloneOptions& opts)
2017-05-18T22:34:40.3642360Z ##[error] at LibGit2Sharp.Repository.Clone(String sourceUrl, String workdirPath, CloneOptions options)
2017-05-18T22:34:40.3642360Z ##[error] at Microsoft.TeamFoundation.DistributedTask.Task.Internal.Core.GitHelper.CloneRepository(String repositoryPath, Uri repositoryUrl, Boolean checkoutSubmodules, String username, String password)
2017-05-18T22:34:40.3642360Z ##[error] at Microsoft.TeamFoundation.DistributedTask.Task.Internal.Core.GitHelper.SyncRepository(Uri repositoryUrl, String rootPath, Boolean cleanRepository, Boolean checkoutSubmodules, String sourceVersion, String username, String password)
2017-05-18T22:34:40.3642360Z ##[error] at Microsoft.TeamFoundation.DistributedTask.Task.Internal.Core.GitHelper.SyncRepository(ITaskEndpoint endpoint, String rootPath, Boolean cleanRepository, Boolean checkoutSubmodules, String sourceVersion)
2017-05-18T22:34:40.3642360Z ##[error] at Microsoft.TeamFoundation.DistributedTask.Task.Internal.Core.GitHelper.SyncAndCheckout(Boolean cleanRepository, String sourceBranch, String sourceVersion, Boolean checkoutSubmodules, CancellationToken cancellationToken)
2017-05-18T22:34:40.3642360Z ##[error] at Microsoft.TeamFoundation.DistributedTask.Plugin.Build.GitSourceProvider.<>c__DisplayClass3_0.<PrepareRepositoryAsync>b__0()
我在 Jenkins 中创建了一个构建,它成功地获取了 Git 存储库。
我尝试了一些在网上找到的解决方案。我在 TFS2(IIS 服务器)上启用了基本身份验证,我在 TFS2 中尝试了两种身份验证模式:NTLM 和协商。
如何在使用位于另一个 TFS 服务器上的存储库的 TFS 中进行构建?
我认为您应该从问题的第 3 行开始:"TFS1 can connect to TFS2 but no viceversa." 错误消息表明身份验证失败,所以听起来 TFS1 上的构建在定义中有一些组件,其中 TFS2 正在为TFS1。至于这可能是什么,我的第一个想法是尝试在单个构建中混合(我假设)TFS1 的 AD 和非 AD 用户可能会导致著名的 'undocumented feature'。我是网络基础设施的新手,所以如果我离得很远,请保持温柔。希望它至少能为您带来一些其他的想法。
编辑 因为它在 Jenkins 中有效,所以更可能与 IIS 相关。
好的,问题已解决。
我们使用一年多前为 TFS 2015 平台安装的 TFS 代理。我们删除并安装了最新版本的 TFS 代理 (https://go.microsoft.com/fwlink/?linkid=842100)
配置需要一段时间,我不得不应用针对此 link 建议的修复:https://github.com/Microsoft/vsts-agent/issues/759
底线,如果使用 TFS 2017,请使用最新版本的 TFS 代理。