无法从 Jenkins 连接到 TFS 2015 git 存储库

cannot connect to TFS 2015 git repository from Jenkins

我无法从 Jenkins 连接到我的 TFS 2015 git 存储库。我不断收到以下错误:

Failed to connect to repository : Command "C:\Program Files\Git\bin\git.exe ls-remote -h -- https://tfsservername/tfs/DefaultCollection/_git/reponame.git HEAD" returned status code 128:
stdout:
stderr: Logon failed, use ctrl+c to cancel basic credential prompt.
fatal: Authentication failed for 'https://tfsservername/tfs/DefaultCollection/_git/reponame.git/'

我的配置:

我尝试了不同的凭据组合。对于用户名,我使用了 domain\username、username@domain,只是用户名,对于密码,我使用了个人访问令牌和 TFS 站点密码。我尝试过的每个组合都会返回 'Authentication failed'。有人有什么建议吗?

更新: 这里有一些更多的背景。我正在尝试从我的 Windows 计算机连接到外部 TFS 服务器。服务器是工作服务器,我无法控制它。我将端口号添加到 git 存储库 url 并收到了不同的错误消息。这是我得到的:

Failed to connect to repository : Command "C:\Program Files\Git\bin\git.exe ls-remote -h -- https://tfsservername:8080/tfs/DefaultCollection/_git/portal HEAD" 
returned status code 128: stdout:stderr: fatal: unable to access 'https://tfsservername:8080/tfs/DefaultCollection/_git/portal/': schannel: 
next InitializeSecurityContext failed: SEC_E_INVALID_TOKEN (0x80090308) 
The token supplied to the function is invalid

从这个 TFS 服务器下载自定义 NuGet 包时,我遇到了类似的问题。我之前能够通过将凭据添加到 NuGet.config 文件来解决问题。我使用的凭据是用户名和 PAT,并为 ValidAuthenticationTypes 添加了值 'basic'。那奏效了。在 Jenkins 中使用相同类型的凭据不起作用。

您正在使用的存储库 url 不需要包含额外的 .git 作为后缀。

正如https://tfsservername/tfs/DefaultCollection/_git/reponame

此外,您还可以尝试将身份验证与 repo url 结合起来,例如:

对于这种身份验证失败的错误,如果您使用 PAT 令牌处理身份验证 与本地 TFS 服务器,请确保您已经 转向服务器上的基本身份验证。否则你会得到一个返回的错误。

We recommend you keep IIS Basic Authentication turned off at all times when using Azure DevOps Server. Only if necessary should you enable IIS Basic Authentication. When IIS Basic Authentication is enabled on your windows machine, it prevents you from using personal access tokens (PATs) as an authentication mechanism.

Source link

对于 TFS 中的克隆 url,应该像下面这样:

git clone https://PAT@tfsservername:8080/tfs/Collectionname/Projectname/_git/GitReponame

如果上述方法仍然无效,请检查您是否使用了代理。尝试暂时关闭代理。

如果问题与 TFS 端或网络有关,其他方法可能有助于缩小范围。你可以直接从浏览器访问那些URL,仔细检查你是否有问题。

如果您的构建服务器是 windows 机器,Git for Windows 使用 windows 使用 Windows 凭据管理器来存储凭据。以构建代理帐户身份登录,并确保像这样在 TFS 服务器的凭据管理器中添加一个条目

然后你可以运行这个git命令来确保它将使用凭证管理器

git config --global credential.helper manager

一位同事帮我解决了这个问题。这是一个 DNS 问题。我必须使用 VPN 连接到 TFS 服务器,因为它是专用工作服务器。我必须转到控制面板->网络连接->vEthernet 属性->Internet 协议版本 4/TCP/IPv4 属性,然后转到高级 TCP/IP 设置。我选择了 'Append these DNS suffixes..' 并添加了与我的 TFS 服务器关联的后缀。然后在 Jenkins 中,我使用我的 TFS 用户名和密码作为凭据。没有错误信息。 @PatrickLu-MSFT 当你提到这可能是网络问题时,我开始思考了。感谢您的帮助。