Skip to content

一、Jenkins 动态参数化构建插件使用手册

1.1 插件简介

Active Choices 是 Jenkins 的动态参数化构建插件,支持通过 Groovy 脚本实现参数的动态生成、级联更新和交互式交互。 通过选择参数的方式,可以讲多个JOB合并在一个JOB中。

  • ​动态性​​:参数值可基于环境变量、外部脚本或用户输入实时生成
  • 级联联动​​:参数间可设置依赖关系实现智能更新
  • 多形态呈现​​:支持下拉框、复选框、单选按钮及 HTML 控件

1.2 插件安装

1.3 Active Choices 插件三种参数类型

  • 主动选择参数 (Active Choices Parameter)
  • 主动选择反应参数 (Active Choices Reactive Parameter)
  • 主动选择反应引用参数 (Active Choices Reactive Reference Parameter)

👇下面我会从插件的使用上去讲解这三种参数类型的区别

1.4 插件使用

1.4.1 自由风格项目中使用

  • 创建一个自由风格项目

在JOb中的参数化配置中看到一些新增了一些参数类型

1.4.1.1 主动选择参数 (Active Choices Parameter)

  • ​定义​​:通过 Groovy 脚本动态生成参数选项,支持多选/单选/复选框
  • 配置步骤​​:
    • 勾选参数化构建 → 添加参数 → 选择 Active Choices Parameter
    • 配置参数名称、描述、脚本类型(Groovy Script)、脚本内容
    • 勾选 Use Groovy Sandbox
    • 设置选项类型(单选/多选/单选按钮/复选框)

bash
Name: services

Groovy Script 脚本内容:

return [
"pig-gateway",
"pig-auth",
"pig-quartz"
]

Description:选择需要发布的项目
Choice Type:Single Select [单选]

实现效果:

1.4.1.2 主动选择反应参数 (Active Choices Reactive Parameter)

  • ​定义​​:根据其他参数变化动态更新选项的级联参数(如回退指定服务->选择回退版本》)
  • 配置步骤​​:
    • 勾选参数化构建 → 添加参数 → 选择 Active Choices Reactive Parameter
    • 配置参数名称、描述、脚本类型(Groovy Script)、脚本内容
    • 设置选项类型(单选/多选/单选按钮/复选框)
    • 设置引用参数

bash
Name: tag

Groovy Script 脚本内容:

pathA="/home/application/jd/be/pig-auth/version"
pathB="/home/application/jd/be/pig-gateway/version"
pathC="/home/application/jd/be/pig-quartz/version"

//脚本的内容大致是:根据选择的服务,去读取不同的服务目录下的version文本内容,读取版本号,然后返回给tag参数
A=['bash','-c',"cat ${pathA}"].execute().text.readLines()
B=['bash','-c',"cat ${pathB}"].execute().text.readLines()
C=['bash','-c',"cat ${pathC}"].execute().text.readLines()

if (services.equals("pig-auth")) {
    return A
} else if (services.equals("pig-gateway")) {
    return B
} else if (services.equals("pig-quartz")) {
    return C
}


Description:选择回退的版本
Choice Type:Single Select [单选按钮]
Referenced parameters:services

实现效果:

1.4.1.3 主动选择反应引用参数 (Active Choices Reactive Reference Parameter)

  • ​​定义​​:仅展示关联参数的说明信息,不参与构建流程 [与第二项的区别在于本参数只作为说明信息,而不能够作为变量往下传递。]
  • 配置步骤​​:
    • 勾选参数化构建 → 添加参数 → 选择 Active Choices Reactive Reference Parameter
    • 配置参数名称、描述、脚本类型(Groovy Script)、脚本内容
    • 设置选项类型(文本输入框/编号列表/项目符号列表/格式化 HTML/格式化隐藏 HTML)
    • 设置引用参数

bash
Name: type

Groovy Script 脚本内容:

switch(services){
 case~/.*pig-gateway.*/:
    return '<img src="https://s3api.srebro.cn:443/picgo/202507161048365.png">'
 break
case ~/.*pig-auth.*/:
   return '<img src="https://s3api.srebro.cn:443/picgo/202507161048366.png">'
break
case ~/.*pig-quartz*/:
   return '<img src="https://s3api.srebro.cn:443/picgo/202507161048367.jpeg">'
break
}

Choice Type:Single Select [格式化 HTML]
Referenced parameters:services

实现效果:

1.4.2 pipeline 流水线中使用

在 pipeline 中使用参数化构建,先使用语法生成器,生成代码,然后复制到 pipeline 中

1.4.2.1 使用 Active choice 实现代码回退

groovy
pipeline {
    agent any
    parameters {
  activeChoice choiceType: 'PT_SINGLE_SELECT', description: '选择需要发布的项目', filterLength: 1, filterable: false, name: 'services', randomName: 'choice-parameter-3800676252603521', script: groovyScript(fallbackScript: [classpath: [], oldScript: '', sandbox: false, script: ''], script: [classpath: [], oldScript: '', sandbox: true, script: '''return [
"pig-gateway",
"pig-auth",
"pig-quartz"
]'''])
    reactiveChoice choiceType: 'PT_RADIO', description: '选择回退的版本', filterLength: 1, filterable: false, name: 'tag', randomName: 'choice-parameter-3800676256483799', referencedParameters: 'services', script: groovyScript(fallbackScript: [classpath: [], oldScript: '', sandbox: false, script: ''], script: [classpath: [], oldScript: '', sandbox: false, script: '''
pathA="/home/application/jd/be/pig-auth/version"
pathB="/home/application/jd/be/pig-gateway/version"
pathC="/home/application/jd/be/pig-quart/version"

A=[\'bash\',\'-c\',"cat  ${pathA}"].execute().text.readLines()
B=[\'bash\',\'-c\',"cat  ${pathB}"].execute().text.readLines()
C=[\'bash\',\'-c\',"cat  ${pathC}"].execute().text.readLines()

if (services.equals("pig-auth")) {
    return A
} else if (services.equals("pig-gateway")) {
    return B
} else if (services.equals("pig-quartz")) {
    return C
}'''])
    activeChoiceHtml choiceType: 'ET_FORMATTED_HTML', name: 'type', omitValueField: false, randomName: 'choice-parameter-3800676259345892', referencedParameters: 'services', script: groovyScript(fallbackScript: [classpath: [], oldScript: '', sandbox: false, script: ''], script: [classpath: [], oldScript: '', sandbox: true, script: '''switch(services){
 case~/.*pig-gateway.*/:
    return \'<img src="https://s3api.srebro.cn:443/picgo/202507161048365.png">\'
 break
case ~/.*pig-auth.*/:
   return \'<img src="https://s3api.srebro.cn:443/picgo/202507161048366.png">\'
break
case ~/.*pig-quartz*/:
   return \'<img src="https://s3api.srebro.cn:443/picgo/202507161048367.jpeg">\'
break
}'''])
    }

stages {
    stage('test') {
    steps {
        script {
        sh """
            echo "当前${services} 服务,回退的版本为:${tag}"
        """
        }
    }
    }
}
}

实现效果:

最近更新

采用 CC BY-NC-ND 4.0 协议,完整转载请注明来自 运维小弟