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

标签 jenkins github groovy jenkins-job-dsl

我有一个 Jenkins 工作常规脚本,如下所示。我希望从参数值中获取 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你会得到一个异常(exception):

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$0.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 参数,并且您传递的值将用于设置分支。

关于jenkins - 如何从参数值替换jenkins job scm内的github分支,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48764477/

相关文章:

node.js - Jenkins Pipeline - 访问 Nodejs 构建中的环境变量

Git checkout 到新的工作目录

groovy - invokeMethod 和 methodMissing 有什么区别?

groovy - gradle.buildStarted 未触发

gradle - tar可能已损坏或以意外方式被压缩

parameters - 从作业仪表板参数化 Hudson 构建

Jenkins Chuck Norris插件

ios - Jenkins:faSTLane 在 cocoapods 中失败

github - 匿名要点的有效期/生命周期?

Git/Github 允许协作但保持控制