我在Jenkins管道的properties部分声明2个参数:
- 数据中心(可以有多种环境类型)
- 环境类型
数据中心类型为选择参数;从数据库中检索该列表;当下拉列表中的数据中心发生变化时,环境类型应相应地填充,也可以通过ScriptlerScript从数据库填充。
问题是,当更改数据中心上的选择时,环境类型列表没有任何变化,该列表是具有referencedParameters的CascadeChoiceParameter**:“数据中心”**。
我应该如何将引用的参数链接到我正在使用的scriptlet脚本-我必须发送什么?
**[名称:“数据中心”,值:“$DataCenter”]**表示第二个参数-当第一个下拉列表值更改时,该值不发送到ScriptletScript。
如果我在Configure部分下从Jenkins接口定义2个参数(因此不通过DSL管道),则一切都按预期工作。
使用propertiessection以外的内容对我来说不起作用-我尝试在pipelinesection内使用activeChoiceParameter,但收到错误“Build parameters definitions cannot have blocks @ line(...)”,这是一个已知问题(请参见下面的第一个示例链接)。
我用过的例子:
Jenkinsfile Active Choice Parameter
Active Choices Reactive Reference Parameter in jenkins pipeline
properties([
parameters([
[
$class: 'ChoiceParameter',
choiceType: 'PT_SINGLE_SELECT',
name: 'DataCenter',
script: [
$class: 'ScriptlerScript',
scriptlerScriptId:'getdatacenters.groovy',
parameters: [
[name:'StatusId', value:'']
]
]
],
[
$class: 'CascadeChoiceParameter',
choiceType: 'PT_SINGLE_SELECT',
name: 'EnvironmentType',
script: [
$class: 'ScriptlerScript',
scriptlerScriptId:'getenvtypesbydatacenter.groovy',
referencedParameters: 'DataCenter',
parameters: [
[name:'DataCenter', value: '$DataCenter']
]
]
]
])
])
pipeline {
...
**预期结果:**当数据中心发生变化时,将填充第二个下拉列表
**实际结果:**数据中心更改时无任何React
在UI中配置参数的管道-行为正常(数据中心更改时加载的环境类型):
1条答案
按热度按时间rta7y2nd1#
有一点要记住:* * 脚本不安全,不应使用它们:https://wiki.jenkins.io/display/JENKINS/Scriptler+Plugin!.
话虽如此,如果您仍然希望继续使用Scriptler插件和CascadeChoiceParameter**,代码可能如下所示:
用于演示目的的getdatacenters.groovy的groovy代码是(但也可以从DB中检索):
这里最需要注意的是referencedParameters:"DataCenter"不在脚本块内,但在"根"级别。如果需要更多参数,可以用逗号分隔。
由于DataCenter是引用参数并自动传输到脚本程序,因此SQL查询内部的**$DataCenter变量将Map为其值。请注意,应将DataCenter作为脚本程序的参数添加到UI参数**部分。
该解决方案的积分归CloudBees所有。