如何在Jenkins控制台日志中查看构建的git命令输出?

4

我已经安装好了Jenkins,并且可以通过git提交触发构建。以下是一个日志示例:

00:00:00.016 Building in workspace D:\SomeWorkspace
00:00:00.016  > C:\Program Files (x86)\Git\bin\git.exe rev-parse --is-inside-work-tree # timeout=10
00:00:00.047 Fetching changes from the remote Git repository
00:00:00.047  > C:\Program Files (x86)\Git\bin\git.exe config remote.origin.url http://usr:pwd@gitRepoAddress.git/git/Repo.git # timeout=10
00:00:00.063 Fetching upstream changes from http://usr@gitRepoAddress.git/git/Repo.git
00:00:00.063  > C:\Program Files (x86)\Git\bin\git.exe --version # timeout=10
00:00:00.234 using .gitcredentials to set credentials
00:00:00.234  > C:\Program Files (x86)\Git\bin\git.exe config --local credential.helper store --file=\"C:\Path\To\Temp\git2724877017172338447.credentials\" # timeout=10
00:00:00.250  > C:\Program Files (x86)\Git\bin\git.exe fetch --tags --progress http://usr@gitRepoAddress.git/git/Repo.git +refs/heads/*:refs/remotes/origin/*

我想做的是查看git命令的输出,以便进行诸如检查正在使用的git版本,查看为什么git fetch很慢等操作,但我无法找出如何显示额外的输出。 有任何想法吗? 当我在此Windows框上安装的git-bash中运行这些命令时,git fetch运行得更快,并且我不确定如何调试Jenkins中发生的情况。


我有同样的问题。你用的是哪个版本的 git?在我的情况下,它是2.3.0和Jenkins 1.598。 - Ethan Leroy
1个回答

2
在Jenkins中有两种可用的Git实现,一种使用命令行工具“git.exe”,另一种是使用Java实现的JGit。根据您提供的示例输出,它使用前者。
如果我们查看该实现,例如“fetch”命令,似乎它只在成功时丢弃输出。
fetch命令的实现从这里开始(链接到回答时的“master”快照):

https://github.com/jenkinsci/git-client-plugin/blob/1a450a5ee993209cc9f27f2a4bfb31bc08a33257/src/main/java/org/jenkinsci/plugins/gitclient/CliGitAPIImpl.java#L242

在execute()方法的313行调用了launchCommandWithCredentials(...);,它返回命令的输出。然而,它没有被存储在任何地方,因此被丢弃了。
跟踪输出如何返回:launchCommandWithCredentials方法从1337行开始实现。在1441行上,它调用launchCommandIn(...);,后者从1672行开始实现。在1689行上,它最终运行实际命令,在1691行上收集命令输出。如果返回代码不为0,即存在某些错误,则在1693行上抛出异常(还包含命令输出),否则返回命令输出。这又由launchCommandWithCredentials 1441返回。现在我们回到313行,在那里返回值被丢弃了。
看一下checkout命令,似乎成功时也会丢弃输出。
因此,如果您真的需要输出,您需要:
修改代码并运行修改后的版本,或者在https://github.com/jenkinsci/git-client-plugin中打开一个问题,并要求添加一个配置设置以启用输出的调试日志记录。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接