Jenkins在配置工程的时候可以添加参数,在multijob中还可以传递参数,这些参数配置有很多奇怪的地方,在这一篇里面将向大家作展示。
当前jenkins版本:2.361.4
基本参数配置
在工程设置的General区域有一个参数化构建过程,勾选后可以配置参数。
配置的示例如下,具体参数的类型可以查阅相关文档
运行后可以在构建的参数区域看到相关参数
multijob的参数
在multijob里面只有Build Steps里面配置的工程才能配置参数传递,构建后触发阶段的不行。
这里配置了一个step_1阶段,触发priority_with_1这个工程。
在高级配置中,勾选Current job parameters选项,用于将当前工程的参数传到后面的工程里。
并在下方添加Predefined parameters预定义参数,增加test3参数。
第一个疑问--子工程没有配置参数能否接收
构建完成后可以在priority_with_1工程对应的这次构建里看到这三个参数,说明传递是成功的。
第二个疑问--rebuild时候能否找到参数
我们rebuild那个子工程,为了效果,我们在其中增加一些打印相关参数的shell代码。
rebuild的时候可以看到这个里面有很多参数
但在实际运行中是没有的,都是空白
如果是通过上级工程触发的就是有的。
当我们给priority_with_1加上一个参数test1后,再去点击rebuild,发现这回参数变少了。
只剩下了配置过的参数。 难道就拿不到了吗,这必然是不可能的
通过代码来查询参数
第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方法只能得到工程自身启动的时候带上的参数,上级工程启动的参数都无法得到。
那么怎么得到完整的参数呢,当然是有方法的。
我们在构建的右下角能看到RestAPI
点击进去后进入到python api页面,可以看到几个参数都在这个里面了。
那么结合api的使用方法,如下代码能得到和页面一样的数据字典
build_url = job.get_build(19).get_build_url()
print(jks.get_data(jks.python_api_url(build_url)))
对其中的parameters键进行解析即可得到全部参数。