Groovy 向创建的作业传递不同的参数

Groovy 向创建的作业传递不同的参数,groovy,jenkins-job-dsl,Groovy,Jenkins Job Dsl,在Jenkins上,我正在使用Job DLS插件准备一个脚本,该脚本将创建为不同环境(dev和prepod)配置的作业。根据此作业必须运行的环境,需要不同的参数 在这种情况下,如何以最短的方式定义dev环境的参数包括与prepod参数相同的参数加上额外的参数,即2个以上 下面是我使用的代码示例 def environments = ["DEV", "PREPROD"] def names = ["name1", "name2", "name3"] def jobParameters = {

在Jenkins上,我正在使用Job DLS插件准备一个脚本,该脚本将创建为不同环境(dev和prepod)配置的作业。根据此作业必须运行的环境,需要不同的参数

在这种情况下,如何以最短的方式定义dev环境的参数包括与prepod参数相同的参数加上额外的参数,即2个以上

下面是我使用的代码示例

def environments = ["DEV", "PREPROD"]
def names = ["name1", "name2", "name3"]

def jobParameters = {
  string {
    name("browser")
    defaultValue("CHROME")
    description("Browser on which one tests will run")
    trim(true)
  }
  string {
    name("parameter1")
    defaultValue("")
    description("")
    trim(true)
  }
}

def jobParametersDev = {
  jobParameters
  string {
    name("parameter2")
    defaultValue("")
    description("")
    trim(true)
  }
  string {
    name("parameter3")
    defaultValue("")
    description("")
    trim(true)
  }
}


def createJob(name, env, runCommand, jobParameters) {
  job("Job-${-> name}-${-> env}") {
    description("My first job for ${-> name}")
    parameters(jobParameters)
    steps {
      shell {
        command(runCommand)
      }
    }
  }
}


for (name in names) {
  for (env in environments) {
    if (env == 'DEV') {
      def runCommand = "python35 -u ./TestSuite-${-> name}.py %parameter1% %parameter2%,%parameter3% %browser%"
      createJob(name, env, runCommand, jobParametersDev)
    } else {
      def runCommand = "python35 -u ./TestSuite-${-> name}.py %parameter1% ${-> env} %browser%"
      createJob(name, env, runCommand, jobParameters)
    }
  }
}
总而言之,我最后尝试的是:

def jobParametersDev = {
  jobParameters
  ...
}
但它不起作用。。。只有jobParametersDev的值可见

如何添加这些值?如果没有必要,我不想重复同样的代码


我将非常感谢您的帮助。

您不能简单地一个接一个地结束。但是您可以链接方法调用。你只需要通过工作推荐

def generateParameters = { job ->
  job.parameters {
    stringParam('param3', '', '')
    // more params here...
  }
}

def generateDevParameters = { job ->
  generateParameters(job)
  job.parameters {
    stringParam('param4', '', '')
    // more params here...
  }
}

def createJob(name, generateParameters) {
  def j = job(name) {
      // more config here...
  }
  generateParameters(j)
}

createJob('test1', generateParameters)
createJob('test2', generateDevParameters)

jobParameters()
有效吗?我检查了它,但没有。有一个错误:错误:(脚本,第9行)没有方法的签名:script.string()适用于参数类型:(script$\u run\u closure1$\u closure9)值:[script$\u run\u closure1]$_closure9@5aef26ee]