jenkins实现动态三级联通下拉选项

背景

在jenkins执行自动化测试的时候,每次需要执行不同的测试用例,这样就需要构建前修改代码,对其他用户不友好,在领导的威逼利诱下,要实现相关参数的配置,下面来记录下如何实现下拉选项和联动的三级选项

插件

确保jenkins安装了active choices插件

选项参数

添加参数选择“参数”。多个选项在不同行。可以看【?】有说明:备用选项,每行一个。第一行的将作为默认选项。


image.png

三级联动菜单实现

一级

Active Choices Parameter


image.png

image.png

类型可以多种,此文中选择的是check boxes,因为要支持多选


image.png

二级

参数选择Active Choices Reactive Parameter


image.png

此处需要注意填写referenced parameters,可以多个用逗号分隔,此文关联的是第一级,填入第一级的变量名字


image.png

因为是多选,所以不同选项的排列组合情况很多,不能单纯的写死返回值,考虑用列表循环,枚举的思路 自动变量获取,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)]
                        }
                        
                        }
                    }
        } 
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 199,830评论 5 468
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 83,992评论 2 376
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 146,875评论 0 331
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 53,837评论 1 271
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,734评论 5 360
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,091评论 1 277
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,550评论 3 390
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,217评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,368评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,298评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,350评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,027评论 3 315
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,623评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,706评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,940评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,349评论 2 346
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 41,936评论 2 341

推荐阅读更多精彩内容