背景
在jenkins执行自动化测试的时候,每次需要执行不同的测试用例,这样就需要构建前修改代码,对其他用户不友好,在领导的威逼利诱下,要实现相关参数的配置,下面来记录下如何实现下拉选项和联动的三级选项
插件
确保jenkins安装了active choices插件
选项参数
添加参数选择“参数”。多个选项在不同行。可以看【?】有说明:备用选项,每行一个。第一行的将作为默认选项。
三级联动菜单实现
一级
Active Choices Parameter
类型可以多种,此文中选择的是check boxes,因为要支持多选
二级
参数选择Active Choices Reactive Parameter
此处需要注意填写referenced parameters,可以多个用逗号分隔,此文关联的是第一级,填入第一级的变量名字
因为是多选,所以不同选项的排列组合情况很多,不能单纯的写死返回值,考虑用列表循环,枚举的思路 自动变量获取,groovy script
def map=["内核PF":["内核PF/内核基础","内核PF/VLAN", "内核PF/2层VLAN","内核PF/VXLAN","内核PF/ntuple"],
"内核VF":["内核VF/内核基础","内核VF/VLAN", "内核VF/2层VLAN","内核VF/VXLAN"],
"ethtool":["ethtool/interrupt_coalesce", "ethtool/show_mac", "ethtool/self_test","ethtool/ring_buffer","ethtool/register_dump_infos","ethtool/queue","ethtool/info_query"],
"ALL":["ALL"]]
def lists=parent_dir.split(",")
def l=[]
for(def i=0; i < lists.length;i++) {
l+=map[lists[i]]
}
if (parent_dir.contains("ALL"))
{return ["ALL:selected:disabled"]}
else if (parent_dir.size()==0)
{return ["请选择一级测试模块:disabled"]}
else {return ["ALL"]+l}
三级
同二级相同,此处不再赘述,附上脚本
def map=["内核PF/内核基础":["内核PF/内核基础/ifconfig","内核PF/内核基础/ipv4", "内核PF/内核基础/ipv6","内核PF/内核基础/offload","内核PF/内核基础/QOS"],
"内核PF/VLAN":["内核PF/VLAN/config","内核PF/VLAN/ipv4", "内核PF/VLAN/ipv6","内核PF/VLAN/offload","内核PF/VLAN/QOS","内核PF/VLAN/vlan_filter","内核PF/VLAN/vlan_strip"],
"内核PF/2层VLAN":["内核PF/2层VLAN/config","内核PF/2层VLAN/ipv4", "内核PF/2层VLAN/ipv6","内核PF/2层VLAN/offload","内核PF/2层VLAN/QOS","内核PF/2层VLAN/vlan_filter","内核PF/2层VLAN/vlan_strip"],
"内核PF/ntuple": ["内核PF/ntuple/内核基础","内核PF/ntuple/VLAN", "内核PF/ntuple/2层VLAN"],
"内核PF/VXLAN":["内核PF/VXLAN/ipv4","内核PF/VXLAN/ipv6", "内核PF/VXLAN/offload"],
"内核VF/内核基础":["内核VF/内核基础/ifconfig","内核VF/内核基础/ipv4", "内核VF/内核基础/ipv6","内核VF/内核基础/offload","内核VF/内核基础/QOS"],
"ethtool/interrupt_coalesce ":["ethtool/interrupt_coalesce"],
"ethtool/show_mac":["ethtool/show_mac"],
"ethtool/self_test":["ethtool/self_test"],
"ethtool/ring_buffer":["ethtool/ring_buffer"],
"ethtool/register_dump_infos":["ethtool/register_dump_infos"],
"ethtool/queue":["ethtool/queue"],
"ethtool/info_query":["ethtool/info_query"],
"ALL":["ALL"]]
def lists=secondary_dir.split(",")
def l=[]
for(def i=0; i < lists.length;i++) {
l+=map[lists[i]]
}
if (secondary_dir.contains("ALL"))
{return ["ALL:selected:disabled"]}
else if (secondary_dir.size()==0)
{return ["请选择二级测试模块:disabled"]}
else {return ["ALL"]+l}
pipline中使用变量
${parent_dir}
# 获取脚本输出结果
def re=sh(script: 'cd /home/kernel_auto/ && ./enum.sh ${third_dir} ${secondary_dir} ${parent_dir}', returnStdout: true).trim()
echo "${re}"
其他类型参数
布尔值
pipline中定义变量和使用变量
parameters{
string(name: 'local_info', defaultValue: '192.168.xx.xx/xx/x', description: '本端服务器信息,IP/用户名/密码,示例:xx' )
string(name: 'remote_info', defaultValue: '192.168.xx.xx/xxx', description: '对端服务器信息,IP/用户名/密码,示例:ip/usrname/pwd' )
string(name: 'test_device', defaultValue: 'ALL', description: 'N10 / N500 / ALL' )
booleanParam(name: 'INSTALL', defaultValue: false, description: '是否安装驱动,默认否,不安装。安装需要填写下面版本信息')
choice(name: 'branch',choices: 'xx\nxx\nxx\nxx\xx', description: '构建的分支 默认xx')
}
stage("(1)可选:是否安装驱动"){
steps{
script{
if (install_driver){
build job: "install_kernel_driver",
parameters: [string(name:'local_info', value: local_info)]
// parameters: [string(name:'local_info', value: local_info),string(name:'pf_driver_name', value: pf_driver_name),
// string(name:'pf_version', value: pf_version)]
}
}
}
}