使用 JGit 在 Jenkins 管道中获取 git 提交 SHA
get git commit SHA within Jenkins pipeline with JGit
我有一个带有 Github 组织插件的 Jenkins,它可以扫描我的组织并构建组织内具有 Jenkinsfile 的所有存储库的所有 branches/PRs。
效果很好,但我想为每个构建检索提交 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)
我是运行以下版本:
- 詹金斯 2.73.3
Git plugin
插件 3.3.0
Pipeline: SCM Step
插件 2.6
在此特定情况下,如果能帮助检索提交的 SHA/修订版,我们将不胜感激。
我创建了一个小 groovy 函数
def getCommitSha(){
return sh(returnStdout: true, script: 'git rev-parse HEAD')
}
您可以将它添加到您的管道中,或者如果您正在使用它,则将其添加到您的共享库中(如果不是,现在是开始的好时机......:-))
git 插件直到 3.3.2 版本才包含 the fix。您至少需要更新到 git 插件 3.3.2。
截至 2017 年 11 月 23 日的当前 git 插件版本是 3.6.4。它包括对多分支管道的重要添加和更改。
还有一个 known bug in the reporting of NAME and EMAIL values which has a regression test 确认该错误会影响所有实现(git 和 jgit)。如果需要,您可以将该回归测试用作使用这些值的示例。
如果您无法从 git 插件 3.3.0 更新到 3.3.2,您可以使用管道脚本中的 JGit 类 来执行相同类型的查询在问题的另一个答案中提供了命令行 git。我从来没有做过,但我相信这是可能的。
我有一个带有 Github 组织插件的 Jenkins,它可以扫描我的组织并构建组织内具有 Jenkinsfile 的所有存储库的所有 branches/PRs。
效果很好,但我想为每个构建检索提交 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)
我是运行以下版本:
- 詹金斯 2.73.3
Git plugin
插件 3.3.0Pipeline: SCM Step
插件 2.6
在此特定情况下,如果能帮助检索提交的 SHA/修订版,我们将不胜感激。
我创建了一个小 groovy 函数
def getCommitSha(){
return sh(returnStdout: true, script: 'git rev-parse HEAD')
}
您可以将它添加到您的管道中,或者如果您正在使用它,则将其添加到您的共享库中(如果不是,现在是开始的好时机......:-))
git 插件直到 3.3.2 版本才包含 the fix。您至少需要更新到 git 插件 3.3.2。
截至 2017 年 11 月 23 日的当前 git 插件版本是 3.6.4。它包括对多分支管道的重要添加和更改。
还有一个 known bug in the reporting of NAME and EMAIL values which has a regression test 确认该错误会影响所有实现(git 和 jgit)。如果需要,您可以将该回归测试用作使用这些值的示例。
如果您无法从 git 插件 3.3.0 更新到 3.3.2,您可以使用管道脚本中的 JGit 类 来执行相同类型的查询在问题的另一个答案中提供了命令行 git。我从来没有做过,但我相信这是可能的。