从DSL内执行Jenkins管道 [英] Execute Jenkins Pipeline from inside DSL

查看:181
本文介绍了从DSL内执行Jenkins管道的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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



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



但我无法做到,因为我尝试过任何我能想到的方式。
任何人都可以帮我吗?

pre $
build(){
job(' p1')
参数([[$ class:'StringParameterValue',name:'param1',value:$ {param1}],
[$ class:'StringParameterValue',name:'param2',值:$ {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 任务的管道文件,然后调用 p1 的s定义的函数来自 p2 。以下是文档中的一个很好的示例

基本上你需要做的是将你的 p1 定义为一个管道文件 p1.groovy

  def p1Actions(param1,param2,param3){
/ /做任何p1用你的3个参数
}

返回这个;

然后从 p2 调用它:

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

如果您希望p1可以从 p2 以外的其他作业中重用,只需按下它即可放入其自己的SCM回购库中,只需在加载脚本之前将SCM结账添加到前面的示例。顺便说一句,这一步也很好地覆盖了 in文档


I do have a pipeline, p1, configured with 3 parameters, param1 as ChoiceParam, and param2 and param3 as runParameters, that retrieve different build-ids to pass them as versions.

I do also have annother pipeline, p2, from which i'd like to run p1. p2 does also have the same parameters configured, so, inside the dsl, i need to call p1 with params1,params2,params3 , as params should be inherited in p2

But i'm unable, as i've tried any single way i can think of. Can anyone help me ?

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

Then, also tried

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

with no success. Any help, please ?

解决方案

Do you really need to define p1 as a full, separate job ? I don't think it's a good practice to chain pipelines jobs like we used to do with freestyle jobs. Instead you should probably load another pipeline file containing your p1 tasks, and then just call p1's defined function from p2. Here is a good example from the doc.

Basically what you need to do is define your p1 as a pipeline file p1.groovy :

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

return this;

And then just call it from p2 :

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

And if you want p1 to be reusable from other jobs than p2, just push it into its own SCM repo, and just add an SCM checkout to previous example, just before loading the script. By the way this step is also very well covered in the documentation.

这篇关于从DSL内执行Jenkins管道的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆