Jenkins 多任务工程参数传递的坑与注意事项

694 阅读2分钟

Jenkins在配置工程的时候可以添加参数,在multijob中还可以传递参数,这些参数配置有很多奇怪的地方,在这一篇里面将向大家作展示。

当前jenkins版本:2.361.4

基本参数配置

在工程设置的General区域有一个参数化构建过程,勾选后可以配置参数。

配置的示例如下,具体参数的类型可以查阅相关文档

image.png

运行后可以在构建的参数区域看到相关参数

image.png

multijob的参数

在multijob里面只有Build Steps里面配置的工程才能配置参数传递,构建后触发阶段的不行。

这里配置了一个step_1阶段,触发priority_with_1这个工程。

image.png

在高级配置中,勾选Current job parameters选项,用于将当前工程的参数传到后面的工程里。

并在下方添加Predefined parameters预定义参数,增加test3参数。

image.png  

第一个疑问--子工程没有配置参数能否接收

构建完成后可以在priority_with_1工程对应的这次构建里看到这三个参数,说明传递是成功的。

image.png  

第二个疑问--rebuild时候能否找到参数

 

我们rebuild那个子工程,为了效果,我们在其中增加一些打印相关参数的shell代码。

image.png

rebuild的时候可以看到这个里面有很多参数

image.png

但在实际运行中是没有的,都是空白

image.png

如果是通过上级工程触发的就是有的。

image.png

当我们给priority_with_1加上一个参数test1后,再去点击rebuild,发现这回参数变少了。

image.png

只剩下了配置过的参数。   难道就拿不到了吗,这必然是不可能的

通过代码来查询参数

第18次是我们配置test1参数之前的构建,19次是配置之后的,20次是手动重跑的。

job = jks.get_job('priority_with_1')  
print(job.get_build(18).get_params())  
print(job.get_build(19).get_params())  
print(job.get_build(20).get_params())

可以看到,Jenkinsapi库的get_params方法只能得到工程自身启动的时候带上的参数,上级工程启动的参数都无法得到。

image.png

那么怎么得到完整的参数呢,当然是有方法的。

我们在构建的右下角能看到RestAPI

image.png

点击进去后进入到python api页面,可以看到几个参数都在这个里面了。

  image.png

那么结合api的使用方法,如下代码能得到和页面一样的数据字典

build_url = job.get_build(19).get_build_url()  
print(jks.get_data(jks.python_api_url(build_url)))

对其中的parameters键进行解析即可得到全部参数。