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

时间:2015-01-21 15:14:52

标签: git jenkins jenkins-plugins

我已经让詹金斯建立并建立,由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很慢,等等我可以&#39 ; t弄清楚如何显示额外的输出。有任何想法吗?当我从这个Windows框中安装的git-bash运行这些命令时,git fetch运行得更快,我不知道如何调试Jenkins中发生的事情。

1 个答案:

答案 0 :(得分:1)

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

执行()中的位有点,在第313行它调用launchCommandWithCredentials(...);,它返回命令的输出。然而,它不存储在任何地方,因此被丢弃。

  

跟踪输出的返回方式:launchCommandWithCredentials方法从第1337行开始实现。在第1441行,它调用launchCommandIn(...);,然后从第1672行开始实现。在第1689行,它最终运行实际命令,在1691年它收集命令输出。如果返回代码不为0,即如果存在某些错误,则在第1693行引发异常(也包含命令输出),否则返回命令输出。这又由launchCommandWithCredentials 1441返回。现在我们回到第313行,其中返回值被丢弃。

查看checkout命令,似乎输出也会在成功时被丢弃。

因此,如果您真的需要输出,您可能需要

  1. 更改代码并运行其修改版本,或
  2. https://github.com/jenkinsci/git-client-plugin中打开一个问题并要求他们添加配置设置以启用输出的调试日志记录