Jenkins管道脚本中的'scm'对象是指定要签出的单个提交还是分支?

时间:2018-01-11 09:10:18

标签: git jenkins jenkins-pipeline

我正在研究Jenkins管道,它在多个节点上并行构建项目。在每个节点上,需要从Git存储库中检出源代码。通过

执行此操作时
checkout scm

SCM Step文档中所述,可以安全地假设每个节点都会检出完全相同的提交(即提交检出scm对象的一部分)或者是可能的情况 - 如果在构建运行时完成提交 - 某些节点将构建与其他节点不同的代码状态(如果scm对象仅指定要检出的存储库和分支)?< / p>

我试图查看scm对象中可用的信息,但似乎我无法在其上使用dump()方法 - Jenkins管道插件拒绝此错误消息

  

org.jenkinsci.plugins.scriptsecurity.sandbox.RejectedAccessException:脚本不允许使用staticMethod org.codehaus.groovy.runtime.DefaultGroovyMethods dump java.lang.Object

使用scm.properties.collect{it}.join('\n')的另一次尝试也失败了,产生了类似的错误:

  

org.jenkinsci.plugins.scriptsecurity.sandbox.RejectedAccessException:脚本不允许使用staticMethod org.codehaus.groovy.runtime.DefaultGroovyMethods getProperties java.lang.Object

我还快速浏览了GitSCM.java源代码和插件支持检出特定提交的appears - 不清楚scm对象是否提供了它。

1 个答案:

答案 0 :(得分:1)

如果我做对了,你可以做的是为分支字段中的所有结账指定git commit id,如: checkout([$ class:'GitSCM', branches:[[name:'5062ac843f2b947733e6a3b105977056821bd352']] ,doGenerateSubmoduleConfigurations:false,extensions:[],gitTool:'Default',submoduleCfg:[],userRemoteConfigs :[[url:'path.to.your.git']]])

其中'5062ac843f2b947733e6a3b105977056821bd352'是您要在所有节点上签出的提交的提交ID。

如果您不知道提交ID。您可以首先签出(浅层结账---只是最后一次提交)主(或任何其他分支)并获取提交ID,将其存储在变量中并将其用于所有节点。例如

def commitId

.
.
.
get the commit id
.
.
.

node('first')
{
     checkout([$class: 'GitSCM', **branches: [[name: 
     **"${commitId}"**]]**, 
     doGenerateSubmoduleConfigurations: false, extensions: [], 
     gitTool: 'Default', submoduleCfg: [], userRemoteConfigs: [[url: 
     'path.to.your.git']]])
}