Active Choices 插件用于参数化的自由风格 Jenkins 作业中,用于创建脚本化、动态和交互式的作业参数。Active Choices 参数可以动态更新,并可以呈现为下拉框、复选框、单选按钮或丰富的 HTML UI 小部件。
Active Choices 参数使用 Groovy 或(可选的)Scriptler Groovy 脚本进行编写。这些自定义脚本支持使用 Jenkins Java API、系统环境变量、全局节点属性,以及可能的外部 Java 和 Javascript 库。
插件安装后,将提供三种新的参数类型:
注意: 响应式引用参数允许将参数显示为格式化的 HTML。在配置使用此功能的作业时,请考虑参数的呈现方式以及是否可能存在安全问题。
注意: 该插件的开发方式严重依赖 Jenkins UI 的 HTML/DOM。我们使用 JavaScript 导航 DOM 以创建参数之间的关系和响应性。请关注 JENKINS-63284 以获取不依赖 UI 的版本更新。当该问题关闭时,该插件应该可以与流水线、DSL、定时器、cron、REST API 触发的作业等正常工作。
Active Choices 参数允许用户为作业参数选择值。参数值可以:
我们将通过简要描述 Active Choices 基于 UI 控件的行为和呈现特征来介绍它们。然后,我们将提供配置指南。

这两种参数都具有额外的有用行为,而响应式引用还有一些独特的呈现选项。
与上述 Active Choices 参数类似:
此外:
Active Choices 响应式引用参数用于增强 Jenkins 作业表单 UI 的引用信息。
考虑到这种用例,响应式引用 UI 控件可以呈现为:
动态生成的 HTML 选项可以处理 Groovy 脚本返回的任何格式良好的 HTML。它可以呈现各种 HTML 元素,包括图片、内联框架、超链接、富文本等。
此外,响应式引用参数可以从 UI 中隐藏,从而提供动态生成隐藏构建参数的选项。这些选项将在响应式引用配置部分进一步讨论。

在上面的示例中,当"Gender"参数发生变化时,"Professions"参数的值选项会更新。
此外,呈现为图片的响应式引用参数"Gender_Balance"也会在"Gender"参数更新时动态更新。
下表总结了三种 Active Choices 参数类型的行为和呈现特征。

该插件包含以下参数类型:
现在我们将描述它们的配置详情。

Active Choices 参数通过在参数配置中设置以下选项进行配置
这些是所有 Jenkins 参数通用的典型参数名称和描述
"脚本"是将动态生成参数值选项的 Groovy 代码或 Scriptlet 脚本
return ['选项 1', '选项 2', '选项 3']
"回退脚本"配置选项提供了备用参数值选项,以防主脚本失败(抛出异常或未返回 java.util.List、数组或 java.util.Map)。
**"选择类型"**选项提供了四种不同的选项值呈现方式:
**"启用过滤器"**选项将在 UI 控件中提供一个文本框过滤器,可以在其中输入文本过滤器。只有包含该文本的值选项才会列出。
此过滤器不区分大小写。
"示例 01" Active Choices 参数配置生成以下构建表单 UI 控件。用户可以从可过滤的下拉列表中选择单个"州"选项。

可以在初始化 Active Choices UI 控件时默认选择一些选项。
您可以通过在脚本返回的元素中添加后缀 :selected 来定义默认值选择。在下面的示例中,我们将使"Parana"州成为参数 UI 控件呈现时的默认选择。

您还可以通过添加后缀 :disabled 来定义禁用选择。在下面的示例中,我们将使各种元素被禁用且不可变。

如您所见,:selected 和 :disabled 可以同时指定。
我们感谢 Dynamic Parameter 插件 的开发者提供了一些初始概念和代码,Active Choices 就是在此基础上实现的。然而,Active Choices 插件与原始 Dynamic Parameter 插件之间存在几个重要的差异和改进:

Active Choices 响应式参数的配置选项与上面 Active Choices 参数所示的选项类似。然而,响应式参数提供了额外的"引用参数"配置选项。
"引用参数"文本字段包含当前作业中以逗号分隔的参数名称列表,当这些参数的值发生变化时,将触发响应式参数的刷新 。在重新执行脚本以生成 Active Choices 控件的新选项值集之前,这些参数的值会传递到脚本绑定上下文中。
让我们来看一个使用Active Choices参数渲染的Jenkins构建表单,它满足以下要求。 该表单:

这个job的UI有两个参数:
第一个参数是来自"示例01"的"州"Active Choices参数。它允许用户选择几个巴西州中的一个。我们完全可以使用Jenkins的Choice参数,但我们使用Active Choice参数(如示例01所示)。这个参数的Groovy脚本如下:
return [ '圣保罗', '里约热内卢', '巴拉那', '阿克里' ]
第二个参数是"城市"Active Choices Reactive参数,它动态显示所选州所属的一组城市,并允许用户选择多个值。"城市"参数的配置如上面的"示例02"所示。
注意:
if (States == "圣保罗") { return ["巴雷托斯", "圣保罗", "伊图"] } else if (States == "里约热内卢") { return ["里约热内卢", "曼加拉蒂巴"] } else if (States == "巴拉那") { return ["库里蒂巴", "蓬塔格罗萨"] } else if (States == "阿克里") { return ["里奥布朗库", "阿克雷兰迪亚"] } else { return ["未知州"] }
每当用户更改州参数的选项时,"城市"参数都会动态更新。注意,引用的"州"参数在脚本绑定中,可以直接使用。
你可以使用Reactive参数类型来做一些事情,比如根据给定的组ID显示Maven构件列表。

Reactive Reference参数的配置选项与上面显示 的Active Choices Reactive参数的选项类似。
然而,Reactive Reference参数提供了一组独特的渲染选项(参见"选择类型")。
鉴于渲染选项的多样性,Active Choices Groovy脚本必须为每个选项返回以下类型的变量:
| 选择类型 | Groovy返回 | 说明 |
|---|---|---|
| 输入文本框 | 字符串 | 返回的字符串显示在一个简单的文本框中 |
| 编号列表 | 列表 | 返回的列表显示为编号列表 |
| 项目符号列表 | 列表 | 返回的列表显示为项目符号列表 |
| 格式化HTML | 字符串 | 返回的字符串必须是格式良好的HTML才能正确显示。你可以在这里包含任何HTML标签,例如:一些<table>,或者指向另一个网站的<form> |
| 格式化隐藏HTML | 字符串 | 参数不会在UI中显示 |
Reactive Reference参数的一个典型应用是动态显示参考信息,这些信息可以指导用户为另一个作业参数选择适当的值。
根据设计,Reactive Reference参数的值不会传递到构建环境,但有一个重要的例外。当选择类型设置为格式化HTML或格式化隐藏HTML,且HTML是一个'input'元素时,值可以传递到构建。有关其他说明,请参阅"高级用法"部分。
下面我们展示了3个具有不同选择类型的Reactive References示例,以及它们在Jenkins作业UI中的相应渲染。

考虑一个例子,用户需要选择一种与可用葡萄酒搭配的餐点。如果在用户考虑特定葡萄酒时能提供一些有用的参考信息,食物的选择会更容易。我们称这个参考信息为"葡萄酒规则",我们可以使用Reactive Reference参数轻松实现它。
当用户从"葡萄酒菜单"中做出新的选择时,"葡萄酒规则"会自动更新(注意引用参数=葡萄酒菜单)。因此,当我们选择"葡萄酒菜单"时,我们还会得到一个"葡萄酒规则",可以指导"食物菜单"的选择。

"葡萄酒规则"参数的完整配置如下所示。

为每个选项生成"葡萄酒规则"格式化HTML的Groovy脚本如下所示。
switch(WINE_MENU) { case ~/.*香槟.*/: winerec='香槟适合搭配任何咸味食物' return "<b>${winerec}</b>" case ~/.*长相思.*/: winerec='长相思适合搭配酸味调料和酱汁' return "<b>${winerec}</b>" case ~/.*绿维特利纳.*/: winerec='当菜肴中有大量新鲜香草时,选择绿维特利纳' return "<b>${winerec}</b>" case ~/.*灰皮诺.*/: winerec='灰皮诺适 合搭配清淡的鱼类菜肴' return "<b>${winerec}</b>" case ~/.*霞多丽.*/: winerec='选择霞多丽搭配油腻的鱼或富含酱汁的鱼' return "<b>${winerec}</b>" case ~/.*半干型雷司令.*/: winerec='半干型雷司令搭配甜辣菜肴' return "<b>${winerec}</b>" case ~/.*阿斯蒂莫斯卡托.*/: winerec='阿斯蒂莫斯卡托适合水果甜点' return "<b>${winerec}</b>" case ~/.*干型桃红.*/: winerec='将干型桃红葡萄酒与丰富的奶酪菜肴搭配' return "<b>${winerec}</b>" case ~/.*黑皮诺.*/: winerec='黑皮诺适合搭配带有泥土风味的菜肴' return "<b>${winerec}</b>" }
你的Groovy脚本绑定可以访问两个额外的变量:
jenkinsProject -> Jenkins项目对象jenkinsBuild -> Jenkins构建对象如前所述,通常Reactive Reference参数的值不会传递给构建。但是,在某些情况下,能够传递这些值会很有用。关于这个功能的更详细讨论,你可以在这里阅读。
在这种情况下,我们想为用户提供一个可编辑的动态默认值。这可以通过以下Reactive Reference配置实现:

在这种情况下,我们希望构建能够访问从UI中的用户输入/选项选择动态生成的参数。该参数是以编程方式创建的,用户不能编辑。这可以通过以下Reactive Reference配置实现:

"格式化隐藏HTML"选择类型在 你想计算要在构建中使用的值,但这些值不应该被用户修改时很有用(例如,计算部署URL)。
在这两种情况下,Groovy脚本必须返回格式如下的HTML元素:
return "<input name='value' value='${ReactiveRefParam}' class='setting-input' type='text'>"
ReactiveRefParam是将传递给构建的Reactive Reference值
这是Reactive Reference 参数的一个有趣应用。它允许你创建具有改进交互性的自定义UI参数控件。参见示例
默认情况下,"Reactive References"会向构建传递一个隐藏的<input name="value" value="">。这意味着你的"Reactive Reference"参数将始终为空,但你可以使用"格式化HTML"参数,并指示插件不包含这个隐藏的值参数。
你可以点击"高级"按钮,在那里你会找到一个省略值字段的选项。这将让你为隐藏参数定义一个值。

我们假设需要使用Scriptler生成参数的用户已经熟悉Scriptler插件。如果你需要有关如何使用Scriptler插件的更多信息,请首先参阅其Wiki页面。
与 Groovy 脚本类似,Scriptler 脚本也是用 Groovy 编写的,用于渲染参数。您的 Scriptler 脚本必须返回 java.util.List、Array 或 java.util.Map 用于 Active Choices 和 Reactive 参数,或者为 Reactive Reference 参数返回自定义 HTML 元素。请注意,当将 Scriptler 与 Active Choices 结合使用时,其他构建参数的值将在 Scriptler 脚本上下文中可用。您无需在 Scriptler 界面或在作业定义期间定义这些参数。
然而,Scriptler 插件提供的主要优势是创建了一个可在多个作业中使用甚至用于自动化的可重用 Groovy 脚本目录。
为了使您的 Scriptler 脚本可以在多个项目中重用,您应该对它们进行参数化,并使用构建参数分配脚本 参数。
Scriptler 中的 Environments.groovy
return ["Select:selected", "DEV", "TEST", "STAGE", "PROD"]
Scriptler 中的 HostsInEnv.groovy
// 静态内容示例。这些列表也可以动态生成作为替代方案。 List devList = ["Select:selected", "dev1", "dev2"] List testList = ["Select:selected", "test1", "test2", "test3"] List stageList = ["Select:selected", "stage1"] List prodList = ["Select:selected", "prod1", "prod2", "prod3", "prod4"] List default_item = ["None"] if (Environment == 'DEV') { return devList } else if (Environment == 'TEST') { return testList } else if (Environment == 'STAGE') { return stageList } else if (Environment == 'PROD') { return prodList } else { return default_item }
Jenkinsfile 中的流水线
properties([ parameters([ [ $class: 'ChoiceParameter', choiceType: 'PT_SINGLE_SELECT', name: 'Environment', script: [ $class: 'ScriptlerScript', scriptlerScriptId:'Environments.groovy' ] ], [ $class: 'CascadeChoiceParameter', choiceType: 'PT_SINGLE_SELECT', name: 'Host', referencedParameters: 'Environment', script: [ $class: 'ScriptlerScript', scriptlerScriptId:'HostsInEnv.groovy', parameters: [ [name:'Environment', value: '$Environment'] ] ] ] ]) ]) pipeline { agent any stages { stage('Build') { steps { echo "${params.Environment}" echo "${params.Host}" } } } }
请注意,尽管 Active Choices 参数可用的"过滤器"文本框通过简单输入一些文本提供了简单的不区分大小写的过滤功能,但它也支持使用正则表达式进行更复杂的过滤。
以下示例展示了使用正则表达式过滤复杂选项列表的情况。

v2.0 之前的 Active Choices 版本可能不安全。在使用较旧版本之前,请查看以下警告:
从 Active Choices v2.0 开始,Active Choices Reactive Reference 参数的沙箱 Groovy 脚本将不再发出被认为不安全的 HTML,例如 <script> 标签。这可能导致"使用参数构建"表单上的行为发生变化,如缺少元素。要解决此问题,需要将发出 HTML 的 Groovy 脚本配置为在脚本安全沙箱之外运行,可能需要在"进程内脚本批准"中单独获得管理员批准。
Active Choices 将加载两个额外的 Javascript 文件,JQuery 和 unochoice.js。
messages.properties 文件的拉取请求或与我们联系!请参阅 CHANGES.md 文件。
如需商业支持,请通过 @tupilabs 与我们联系。

要了解插件的来源,请查看 BioUno 项目。

如果您希望赞助插件的开发或 JIRA 中的公开问题,请与我们联系。
在 BioUno 网站上查看文章、教程和出版物列表


AI赋能电商视觉革命,一站式智能商拍平台
潮际好麦深耕服装行业,是国内AI试衣效果最好的软件。使用先进AIGC能力为电商卖家批量提供优质的、低成本的商拍图。合作品牌有Shein、Lazada、安踏、百丽等65个国内外头部品牌,以及国内10万+淘宝、天猫、京东等主流平台的品牌商家,为卖家节省将近85%的出图成本,提升约3倍出图效率,让品牌能够快速上架。


企业专属的AI法律顾问
iTerms是法大大集团旗下法律子品牌,基于最先进的大语言模型(LLM)、专业的法律知识库和强大的智能体架构,帮助企业扫清合规障碍,筑牢风控防线,成为您企业专属的AI法律顾问。


稳定高效的流量提升解决方案,助力品牌曝光
稳定高效的流量提升解决方案,助力品牌曝光


最新版Sora2模型免费使用,一键生成无水印视频
最新版Sora2模型免费使用,一键生成无水印视频


实时语音翻译/同声传译工具
Transly是一个多场景的AI大语言模型驱动的同声传译、专业翻译助手,它拥有超精准的音频识别翻译能力,几乎零延迟的使用体验和支持多国语言可以让你带它走遍全球,无论你是留学生、商务人士、韩剧美剧爱好者,还是出国游玩、多国会议、跨国追星等等,都可以满足你所有需要同传的场景需求,线上线下通用,扫除语言障碍,让全世界的语言交流不再有国界。


选题、配图、成文,一站式创作,让内容运营更高效
讯飞绘文,一个AI集成平台,支持写作、选题、配图、排版和发布。高效生成适用于各类媒体的定制内容,加速品牌传播,提升内容营销效果。


AI辅助编程,代码自动修复
Trae是一种自适应的集成开发环境(IDE),通过自动化和多元协作改变开发流程。利用Trae,团队能够更快速、精确地编写和部署代码,从而提高编程效率和项目交付速度。Trae具备上下文感知和代码自动完成功能,是提升开发效率的理想工具。


最强AI数据分析助手
小浣熊家族Raccoon,您的AI智能助手,致力于通过先进的人工智能技术,为用户提供高效、便捷的智能服务。无论是日常咨询还是专业问题解答,小浣熊都能以快速、准确的响应满足您的需求,让您的生活更加智能便捷。


像人一样思考的AI智能体
imini 是一款超级AI智能体,能根据人类指令,自主思考、自主完成、并且交付结果的AI智能体。


AI数字人视频创作平台
Keevx 一款开箱即用的AI数字人视频创作平台,广泛适用于电商广告、企业培训与社媒宣传,让全球企业与个人创作者无需拍摄剪辑,就能快速生成多语言、高质量的专业视频。
最新AI工具、AI资讯
独家AI资源、AI项目落地

微信扫一扫关注公众号