actice choice 这个插件的作用是可以在参数化构建时,创建一个可选的参数

例如,用jenkins创建一个发布project时,我们发布过程中需要选择环境、服务名称等,我们希望在参数化构建时,可以提供一个下拉框给用户进行选择,这时候可以使用这个插件来创建这样的可选参数


下面是效果图

image.png


如何使用actice choice 插件

1、安装active choices插件

image.png


2、创建一个project,勾选参数化构建

image.png


勾选Groovy script

将选项写成上图这个样子即可。这里选项是固定的,我们可以这样写死,如果选项是动态的呢?比如产品这个选项,现在有十个产品,后面可能会增加到30个。我们写死的化很需要一直维护。这种情况怎么办?能否动态的获取所有产品名称呢?答案是肯定的


比如:我们公司产品我是通过python脚本调用cmdb的api接口获取到的,然后将获取的所有产品写入到文件中。一行一个产品,如下图这样子

image.png


Groovy script从文件中获取变量值

image.png


参数类型

参数类型可以设置为单选和多选,还有radio buttons这种单选框,check box是复选框,可以根据自己的需求来使用

image.png



扩展

An Active Choices Reactive Parameter

active choice插件还有一个好用的功能,就是当有多个参数时,第二个参数的值,会根据第一个参数选择的值进行变换。举一个很常见的场景:

在发布时,当选择生产环境时,第二个参数的选项里面应该出现生产环境的服务器,当选择测试环境时,第二个选项里面应该出现测试环境的服务器。


我这里有一个需求,当选择一个模块时,会根据模块名称,查通过CMDB接口查询哪些产品有该模块。

先看下效果图,由于我本机测试环境没有办法连CMDB,所以只测试当选择一个module时,我的aaa参数这里,也出现该module。效果图如下:

image.png


aaa参数配置

image.png


image.png


module=module
def list = "/opt/aaa.py $module".execute().text.readLines()
list.each{language->
  println language
}


/opt/aaa.py脚本内容

[root@localhost opt]# cat aaa.py 
#!/usr/bin/python
import sys
print  sys.argv[1]

该脚本很简单,就是传递一个参数,然后print这个参数。在aaa这个变量里面,这个参数是关联的module,所以打印的就是用户选择的module的名称。











参考链接:

https://www.jianshu.com/p/3f54cf1674ce


官方文档:

https://wiki.jenkins.io/display/JENKINS/Active+Choices+Plugin


要查询某个插件的用法,可以在这里根据插件名称搜索

https://plugins.jenkins.io/