我正在为我正在进行的项目配置CI环境而且我遇到了问题。在我将描述问题之前,这里是工具和工具。我使用的技术堆栈:
TFS服务器支持:NTLM和基本身份验证。
情景:
我想使用GitVersion工具自动标记每个构建的源代码。这就是为什么作为第一个构建步骤,我使用命令添加了命令行步骤:
gitversion.exe "%system.teamcity.build.checkoutDir%" /output "buildserver"
/u "Domain\Username" /p "Pass"
GitVersion会从[checkout-dir]\.git\config
自动获取存储库网址。
不幸的是,当我运行构建时,我收到一个异常:
LibGit2Sharp.LibGit2SharpException: Request failed with status code: 401
以下是构建日志的输出:
[Step 2/5] Starting: C:\ProgramData\chocolatey\bin\gitversion.exe /output buildserver /u Domain\UserName /p password
[Step 2/5] in directory: C:\BuildAgent\work\Playground
[Step 2/5] Working directory: C:\BuildAgent\work\Playground [Step 2/5] Applicable build agent found: 'TeamCity'.
[Step 2/5] One remote found (origin -> 'http://our.tfs.server.lgbs:8080/tfs/project/_git/Playground').
[Step 2/5] Fetching from remote 'origin' using the following refspecs:
+refs/heads/*:refs/remotes/origin/*.
[Step 2/5] An unexpected error occurred:
[Step 2/5] LibGit2Sharp.LibGit2SharpException: Request failed with status code: 401
[Step 2/5] at LibGit2Sharp.Core.Ensure.HandleError(Int32 result)
[Step 2/5] at LibGit2Sharp.Core.Proxy.git_remote_fetch(RemoteSafeHandle remote, Signature signature, String logMessage)
[Step 2/5] at LibGit2Sharp.Network.DoFetch(RemoteSafeHandle remoteHandle, FetchOptions options, Signature signature, String logMessage)
[Step 2/5] at LibGit2Sharp.Network.Fetch(Remote remote, FetchOptions options, Signature signature, String logMessage)
[Step 2/5] at GitVersion.GitHelper.NormalizeGitDirectory(String gitDirectory, Authentication authentication)
我无法弄清楚它有什么问题。
当我在Build Agent机器上直接从CMD运行相同的命令时,它执行得非常好。
我已经尝试过:
http://Domain\UserName@tfs-server-url\projectname
的一部分传递,但失败并出现了不同的错误:Malformed URL "http://Domain\UserName@tfs-server-url\projectname"
git fetch
作为构建步骤(以检查凭据是否正常)并成功,有没有人遇到过类似的问题?你有什么建议吗?似乎除了GitVersion之外别无选择。我担心唯一的解决方法是手工贴标签,这不方便,尤其是GitFlow。