将不同的参数传递给创建的作业
Passing different parameters to created jobs
在 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 的值可见。
如何添加这些值?如果没有必要,我不想重复相同的代码。
如果有任何帮助,我将不胜感激。
您不能简单地在一个闭包中调用另一个闭包。但是您可以链接方法调用。您只需要通过工作推荐信即可。
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)
在 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 的值可见。
如何添加这些值?如果没有必要,我不想重复相同的代码。
如果有任何帮助,我将不胜感激。
您不能简单地在一个闭包中调用另一个闭包。但是您可以链接方法调用。您只需要通过工作推荐信即可。
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)