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辅助编程,代码自动修复
Trae是一种自适应的集成开发环境(IDE),通过自动化和多元协作改变开发流程。利用Trae,团队能够更快速、精确地编写和部署代码,从而提高编程效率和项目交付速度。Trae具备上下文感知和代码自动完成功能,是提升开发效率的理想工具。
AI小说写作助手,一站式润色、改写、扩写
蛙蛙写作—国内先进的AI写作平台,涵盖小说、学术、社交媒体等多场景。提供续写、改写、润色等功能,助力创作者高效优化写作流程。界面简洁,功能全面,适合各类写作者提升内容品质和工作效率。
全能AI智能助手,随时解答生活与工作的多样问题
问小白,由元石科技研发的AI智能助手,快速准确地解答各种生活和工作问题,包括但不限于搜索、规划和社交互动,帮助用户在日常生活中提高效率,轻松管理个人事务。
实时语音翻译/同声传译工具
Transly是一个多场景的AI大语言模型驱动的同声传译、专业翻译助手,它拥有超精准的音频识别翻译能力,几乎零延迟的使用体验和支持多国语言可以让你带它走遍全球,无论你是留学生、商务人士、韩剧美剧爱好者,还是出国游玩、多国会议、跨国追星等等,都可以满足你所有需要同传的场景需求,线上线下通用,扫除语言障碍,让全世界的语言交流不再有国界。
一键生成PPT和Word,让学习生活更轻松
讯飞智文是一个利用 AI 技术的项目,能够帮助用户生成 PPT 以及各类文档。无论是商业领域的市场分析报告、年度目标制定,还是学生群体的职业生涯规划、实习避坑指南,亦或是活动策划、旅游攻略等内容,它都能提供支持,帮助用户精准表达,轻松呈现各种信息。
深度推理能力全新升级,全面对标OpenAI o1
科大讯飞的星火大模型,支持语言理解、知识问答和文本创作等多功能,适用于多种文件和业务场景,提升办公和日常生活的效率。讯飞星火是一个提供丰富智能服务的平台,涵盖科技资讯、图像创作、写作辅助、编程解答、科研文献解读等功能,能为不同需求的用户提供便捷高效的帮助,助力用户轻松获取信息、解决问题,满足多样化使用场景。
一种基于大语言模型的高效单流解耦语音令牌文本到语音合成模型
Spark-TTS 是一个基于 PyTorch 的开源文本到语音合成项目,由多个知名机构联合参与。该项目提供了高效的 LLM(大语言模型)驱动的语音合成方案,支持语音克隆和语音创建功能,可通过命令行界面(CLI)和 Web UI 两种方式使用。用户可以根据需求调整语音的性别、音高、速度等参数,生成高质量的语音。该项目适用于多种场景,如有声读物制作、智能语音助手开发等。
AI助力,做PPT更简单!
咔片是一款轻量化在线演示设计工具,借助 AI 技术,实现从内容生成到智能设计的一站式 PPT 制作服务。支持多种文档格式导入生成 PPT,提供海量模板、智能美化、素材替换等功能,适用于销售、教师、学生等各类人群,能高效制作出高品质 PPT,满足不同场景演示需求。
选题、配图、成文,一站式创作,让内容运营更高效
讯飞绘文,一个AI集成平台,支持写作、选题、配图、排版和发布。高效生成适用于各类媒体的定制内容,加速品牌传播,提升内容营销效果。
专业的AI公文写作平台,公文写作神器
AI 材料星,专业的 AI 公文写作辅助平台,为体制内工作人员提供高效的公文写作解决方案。拥有海量公文文库、9 大核心 AI 功能,支持 30 + 文稿类型生成,助力快速完成领导讲话、工作总结、述职报告等材料,提升办公效率,是体制打工人的得力写作神器。
最新AI工具、AI资讯
独家AI资源、AI 项目落地
微信扫一扫关注公众号