使用JGit

时间:2017-11-14 10:09:36

标签: jenkins jenkins-pipeline jgit

我有一个带有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)

我正在运行以下版本:

  • Jenkins 2.73.3
  • Git plugin插件3.3.0
  • Pipeline: SCM Step插件2.6

非常感谢在这种特殊情况下检索提交SHA /修订版的任何帮助。

2 个答案:

答案 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')
}

您可以将它添加到您的管道,或者如果您正在使用它,则可以添加到您的共享库中(如果不是,这是开始的好时机...... :-))