В 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.
Как добавить эти значения? Если в этом нет необходимости, я не хочу дублировать один и тот же код.
Буду очень признателен за любую помощь.
Я проверил, но нет. Произошла ошибка: ОШИБКА: (сценарий, строка 9) Нет подписи метода: script.string() применима для типов аргументов: (script$_run_closure1$_closure9) значений: [script$_run_closure1$_closure9@5aef26ee]
Вы не можете просто вызвать одно замыкание внутри другого. Но вы можете связать вызовы методов. Вам просто нужно передать ссылку на работу.
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()
работает?