如何从参数值替换 jenkins job scm 中的 github 分支

How to replace github branch inside jenkins job scm from parameter value

我有一个 jenkins 作业 groovy 脚本如下。我希望 Github 分支取自参数值。

Groovy 脚本:

 git_url = "git@github.deere.com:ABC/XYZ.git" jenkins_node = "master"
    freeStyleJob('myjob') {
    logRotator(numToKeep = 100)
    parameters {    stringParam("GIT_BRANCH", "master" , "master cert dev")   }
    label(jenkins_node)
    scm {
     git {
      remote { url(git_url) }
      branch($GIT_BRANCH)  
      extensions { }
         }
     }

您必须将 $GIT_BRANCH 变量放在单引号中,这样它就不会被作业 DSL 脚本解析。将您的脚本粘贴到此 Job DSL playground app,您将得到一个异常:

javaposse.jobdsl.dsl.DslScriptException: (script, line 12) No such property: $GIT_BRANCH for class: javaposse.jobdsl.dsl.helpers.scm.GitContext
    at javaposse.jobdsl.dsl.AbstractDslScriptLoader.runScriptEngine(AbstractDslScriptLoader.groovy:112)
    at javaposse.jobdsl.dsl.AbstractDslScriptLoader$_runScripts_closure1.doCall(AbstractDslScriptLoader.groovy:59)
    at javaposse.jobdsl.dsl.AbstractDslScriptLoader.runScripts(AbstractDslScriptLoader.groovy:46)
    at javaposse.jobdsl.dsl.AbstractDslScriptLoader$runScripts[=10=].callCurrent(Unknown Source)

但是如果你加上单引号:

branch('$GIT_BRANCH')

然后你会得到你的工作 XML 正确生成文件:

<!-- 1. myjob -->
<project>
    <actions></actions>
    <description></description>
    <keepDependencies>false</keepDependencies>
    <properties>
        <hudson.model.ParametersDefinitionProperty>
            <parameterDefinitions>
                <hudson.model.StringParameterDefinition>
                    <name>GIT_BRANCH</name>
                    <defaultValue>master</defaultValue>
                    <description>master cert dev</description>
                </hudson.model.StringParameterDefinition>
            </parameterDefinitions>
        </hudson.model.ParametersDefinitionProperty>
    </properties>
    <canRoam>false</canRoam>
    <disabled>false</disabled>
    <blockBuildWhenDownstreamBuilding>false</blockBuildWhenDownstreamBuilding>
    <blockBuildWhenUpstreamBuilding>false</blockBuildWhenUpstreamBuilding>
    <triggers></triggers>
    <concurrentBuild>false</concurrentBuild>
    <builders></builders>
    <publishers></publishers>
    <buildWrappers></buildWrappers>
    <logRotator>
        <daysToKeep>100</daysToKeep>
        <numToKeep>-1</numToKeep>
        <artifactDaysToKeep>-1</artifactDaysToKeep>
        <artifactNumToKeep>-1</artifactNumToKeep>
    </logRotator>
    <assignedNode>master</assignedNode>
    <scm class='hudson.plugins.git.GitSCM'>
        <userRemoteConfigs>
            <hudson.plugins.git.UserRemoteConfig>
                <url>git@github.deere.com:ABC/XYZ.git</url>
            </hudson.plugins.git.UserRemoteConfig>
        </userRemoteConfigs>
        <branches>
            <hudson.plugins.git.BranchSpec>
                <name>$GIT_BRANCH</name>
            </hudson.plugins.git.BranchSpec>
        </branches>
        <configVersion>2</configVersion>
        <doGenerateSubmoduleConfigurations>false</doGenerateSubmoduleConfigurations>
        <gitTool>Default</gitTool>
    </scm>
</project>

这是我在沙箱中使用的作业 DSL:

git_url = "git@github.deere.com:ABC/XYZ.git" 
jenkins_node = "master"
freeStyleJob('myjob') {
  logRotator(numToKeep = 100)
  parameters {
    stringParam("GIT_BRANCH", "master" , "master cert dev")   
  }

  label(jenkins_node)
  scm {
    git {
      remote { url(git_url) }
      branch('$GIT_BRANCH')  
      extensions { }
    }
  }
}

现在,当您 运行 从该 DSL 生成作业时,它会要求您提供 GIT_BRANCH 参数,您传递的值将用于设置分支。