4

我正在为我正在处理的项目配置 CI 环境,但我遇到了困难。在我在这里描述问题之前,我使用的工具和技术堆栈是:

  • Teamcity 8.1.5 作为构建服务器,
  • Git 作为源代码版本控制,
  • GitFlow 作为 Git 工作流,
  • TFS 2013 作为一个协作项目(绑定了 Git 存储库),
  • GitVersion 作为标记程序集和发布的工具。

TFS 服务器同时支持:NTLM 和基本身份验证。

场景:

我想使用 GitVersion 工具在每个构建中自动标记源。这就是为什么作为第一个构建步骤,我使用命令添加了命令行步骤:

gitversion.exe "%system.teamcity.build.checkoutDir%" /output "buildserver" 
/u "Domain\Username" /p "Pass"

存储库 url 由 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 运行相同的命令时,它执行得非常好。

我已经尝试过的:

  • 验证构建步骤命令在与我在 CMD 中手动尝试的命令相同的身份下运行,
  • 将存储库凭据添加到 Windows 凭据存储,
  • 使用 /url 开关将 url 直接传递给 GitVersion
  • 将用户名作为 url 的一部分传递:http://Domain\UserName@tfs-server-url\projectname但失败并出现不同的错误:Malformed URL "http://Domain\UserName@tfs-server-url\projectname"
  • 成功调用git fetch作为构建步骤(检查凭据是否正常),
  • 使用谷歌,但我没有发现类似的问题。

有没有人遇到过类似的问题?你会建议做什么?GitVersion 似乎别无选择。恐怕唯一的解决方法是关心手工标记,这不方便,尤其是使用 GitFlow。

4

1 回答 1

0

因为我在帮助一位遇到同样问题的同事时偶然发现了这个问题:

如果你在 TeamCity 下运行时遇到这个无益的错误,那是因为 GitVersion 不知道它被要求构建哪个分支。

确保您设置了一个env.Git_Branch(拼写很重要!)环境变量。该变量通常会初始化为 %teamcity.build.vcs.branch.[Repository_Id]%.

有关更多信息,请参阅https://gitversion.net/docs/reference/build-servers/teamcity上的文档

于 2021-09-24T19:12:16.940 回答