我有一个名为 buildall 的管道工作,如下所示:
pipeline {
stages {
stage("job1") {
build job: "job1"
}
}
}
buildall 作业有25个参数。我想将所有 buildall 的参数传递给 job1 。有没有一种简单的方法可以做到这一点,而不是手动指定每个参数?
在这个问题中:Pipeline pass parameters to downstream jobs 一个子问题被问到但从未回答:甚至更好,是否有一种不那么繁琐的方式可以将所有管道参数传递给下游工作。
这就是我的问题。
答案 0 :(得分:9)
以下似乎有效(尽管我还没有对它进行过广泛的测试):
.limitToLast(5)
缺点:要访问rawBuild和getAction,您必须在Manage Jenkins>下的Jenkins中禁用Groove沙箱或批准这些签名。进程内脚本批准。此对话框将向您显示您可能引入了一个安全漏洞。因此,如果你想冒这个风险,这取决于你的环境。
答案 1 :(得分:5)
如果您不关心参数类型,此方法不需要禁用Groovy Sandbox - 它只是假设所有参数都可以视为字符串 (例如)不适用于“文件”:
def myparams = params.collect{
string(name: it.key, value: it.value)
}
build job: 'downstream-job', parameters: myparams
扩展逻辑以处理预定义的非字符串参数类型并不太难,但我同意这不是必需的。更好的方法是以build()DSL闭包所需的格式公开参数,包括当前通过“params”全局变量不可见的类型细节,或者可能添加布尔值,例如:
// I wish:
build job: 'downstream-job', includeMyParameters: true, parameters: anyExtras
答案 2 :(得分:1)
您可以使用以下命令传递所有管道参数:
def params=[]
env.getEnvironment().each{ k, v ->
params.add(string(name:"${k}", value:"${v}"))
}
def slaveJob = build job: 'BuildJob', parameters:params