从 DSL 内部执行 Jenkins 管道

Execute Jenkins Pipeline from inside DSL

我有一个管道 p1,配置了 3 个参数,param1 作为 ChoiceParam,param2 和 param3 作为 运行Parameters,检索不同的构建 ID 以将它们作为版本传递。

我还有另一个管道 p2,我想从中 运行 p1。 p2 也配置了相同的参数,因此,在 dsl 内部,我需要使用 params1,params2,params3 调用 p1,因为 params 应该在 p2

中继承

但是我做不到,因为我已经尝试了我能想到的任何一种方法。 谁能帮帮我?

p2:
build() {
    job('p1')
    parameters([[$class:'StringParameterValue', name:'param1', value:${param1}],
                [$class:'StringParameterValue', name:'param2', value:${param2}],
                [$class:'StringParameterValue', name:'param3', value:${param3}]
    ])
}

然后,也试过了

p2:
build(job:'p1', parameters: ([[$class:'StringParameterValue', name:'param1', value:${param1}],
            [$class:'StringParameterValue', name:'param2', value:${param2}],
            [$class:'StringParameterValue', name:'param3', value:${param3}]
]))

没有成功。有什么帮助吗?

您真的需要将 p1 定义为完整的独立工作吗?我不认为像我们过去处理自由式作业那样链接管道作业是一个好习惯。 相反,您应该加载另一个包含 p1 任务的管道文件,然后从 p2 调用 p1 的定义函数。这里是 a good example from the doc.

基本上您需要做的是将 p1 定义为管道文件 p1.groovy :

def p1Actions(param1, param2, param3) {
    // Do whatever p1 does with your 3 params
}

return this;

然后从 p2 调用它:

pipeline = load 'p1.groovy'
pipeline.p1Actions()

如果您希望 p1 可以从 p2 之外的其他作业中重用,只需将其推送到自己的 SCM 存储库中,并在加载脚本之前向前面的示例添加一个 SCM 检出。顺便说一句,这一步也很好地涵盖了 in the documentation.