Передача различных параметров созданным рабочим местам - PullRequest
0 голосов
/ 28 мая 2019

В Jenkins, используя плагин Job DLS, я пытаюсь подготовить один скрипт, который будет создавать задания, настроенные для разных сред (dev и preprod). Зависит от того, в каких средах должно выполняться это задание, нужны разные параметры.

В этой ситуации, как кратчайшим образом определить, что параметры среды разработки включают в себя те же параметры, что и параметры preprod, плюс дополнительно, т. Е. Еще 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.

Как добавить эти значения? Если это не нужно, я не хочу удваивать один и тот же код.

Буду очень признателен за любую помощь.

1 Ответ

1 голос
/ 12 июня 2019

Вы не можете просто вызвать одно замыкание внутри другого. Но вы можете связывать вызовы методов. Вам просто нужно передать справку с работы.

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)
...