我正在研究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
对象是否提供了它。
答案 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']]])
}