我有一个带有Github组织插件的Jenkins,它可以扫描我的组织并构建组织中拥有Jenkins文件的所有存储库的所有分支/ PR。
它工作得很好,但我想为每个构建检索提交SHA,以便用分支名称和提交SHA标记Docker镜像。
使用env.BRANCH_NAME
获取分支名称非常有用,但我找不到任何方法来获取提交SHA。
问题是我们正在使用JGit,因此我无法使用git log
来检索它。
我尝试使用sh 'printenv'
查看ENV中包含的内容,但那里没有任何用处。
我也尝试了以下内容:
def checkoutResults = checkout scm
echo 'checkout results: ' + checkoutResults
但这会产生以下结果:
checkout results: [:]
即使我无法从我的管道中获得修订,Jenkins也能正常运行,正如我在日志中看到的那样:
...
Obtained Jenkinsfile from 98062e5f651ca698f4303c3bb8d20665ce491294
...
Checking out Revision 98062e5f651ca698f4303c3bb8d20665ce491294 (docker)
我正在运行以下版本:
Git plugin
插件3.3.0 Pipeline: SCM Step
插件2.6 非常感谢在这种特殊情况下检索提交SHA /修订版的任何帮助。
答案 0 :(得分:2)
在3.3.2版本发布之前,git插件不包含the fix。您需要至少更新到git插件3.3.2。
截至2017年11月23日的当前git插件版本为3.6.4。它包括对多分支管道的重要补充和更改。
在NAME和EMAIL值的报告中还有一个known bug,其中regression test确认错误会影响所有实现(git和jgit)。您可以使用该回归测试作为在需要时使用这些值的示例。
如果你无法从git插件3.3.0更新到3.3.2,你可以使用管道脚本中的JGit类来执行与命令行git提供的相同类型的查询。这个问题。我从来没有这样做过,但我相信这是可能的。
答案 1 :(得分:0)
我创建了一个小的groovy函数
def getCommitSha(){
return sh(returnStdout: true, script: 'git rev-parse HEAD')
}
您可以将它添加到您的管道,或者如果您正在使用它,则可以添加到您的共享库中(如果不是,这是开始的好时机...... :-))