动态或条件显示Jenkins作业的参数(而不是它们的值群)

时间:2015-05-28 17:48:35

标签: jenkins parameters conditional jenkins-plugins optional-parameters

假设我有两种(或更多)类型的项目: app (应用程序)和 svc (服务),我创建了一个Jenkins工作(一般工作)有一堆参数。 这个常见的工作可能会调用另一个下游/单个项目类型的工作(触发其他项目构建等并传递相应的参数),但它超出了这个问题的范围。

例如:
PROJ_TYPE (带有值的选项参数类型: app svc
Param2 (某种类型)
Param3 (级联类型,即它取决于父参数PROJ_TYPE的值)。
Param4 (假设我只想在选择PROJ_TYPE作为" app")时显示此参数。 Param5 (某种类型)
Param6 (假设我只想在选择PROJ_TYPE作为&#34; svc&#34;时显示此参数。此参数可以是任何类型,即选择,动态,扩展选择等)< BR />

如果我在Jenkins作业中有上述参数,那么当用户尝试构建时,Jenkins作业将显示/提示所有参数(即使用参数构建)。

只有当PROJ_TYPE参数被选为应用程序时,Jenkins才有可能显示参数(Param4),否则,我根本不想显示此参数 - 或者某种方式如果它&# 39;有可能把它变灰吗? 即。在这种情况下,作业将只显示PROJ_TYPE,Param2,Param3,Param4和Param5(并且不会显示Param6或它被禁用/灰显)。

同样,我只想在PROJ_TYPE参数选择为 svc 时显示参数(Param6),否则,我不想显示此参数 - 或者如果它&#39以某种方式显示有可能把它弄糊涂吗? 即。在这种情况下,作业将只显示PROJ_TYPE,Param2,Param3,Param5和Param6(并且不会显示Param4或它被禁用/灰显)。

3 个答案:

答案 0 :(得分:5)

我知道这是一个老人,但我一直在寻找类似的东西,直到找到Active Choices Plugin。它不会隐藏参数,但可以编写Groovy脚本(直接在Active Choices参数或Scriptler中)来返回不同的值。例如:

的Groovy
if(MY_PARAM.equals(“Foo”)){return ['NOT APPLICABLE']}

否则if(MY_PARAM.equals(“Bar”)){return ['这是唯一的选择']}

否则if(MY_PARAM.equals(“Baz”)){return ['Bazoo','Bazar','Bazinga'}}

/ Groovy的

在此示例中,MY_PARAM是Jenkins作业中的参数。只要您将'MY_PARAM'放入Active Choices'Referenced Parameters'字段,脚本就会在任何时候更改参数并显示匹配的返回值(或值列表)。

通过这种方式,您可以根据之前的选择返回不同的选项列表(包括一个或甚至零选项的列表),但我还没有找到一种方法来阻止参数出现在参数页面上。多个活动选择参数可以引用相同的参数,因此当有人选择“App”或“Svc”时,所有不相关的参数将切换为“不适用”或任何适合您的参数。我也玩过一些HTML文本颜色,但没有手头的代码示例来分享。

德克

答案 1 :(得分:2)

根据说明,您可以使用Dynamic-Jenkins-Parameter plugin

执行此操作
  

Jenkins参数插件,允许两个选择元素。第二个选择将根据为第一个选择所做的选择填充值。

wiki上提供的示例完全符合您的需求(至少对于一个条件案例)。我没有亲自尝试。

答案 2 :(得分:1)

@derik奏效了!为了我 第二个列表是根据第一个元素的选择填充的。

我使用了Active Choice反应参数插件, 要求是第一个参数将列出我的服务器, 根据第一选择,第二个参数是连接到选定的服务器并列出备份。 因此,可用备份列表将在此处显示进行还原。

  1. 已启用参数化。
  2. 选择选择参数 名称:服务器 选择:选择..        a        分期        主 说明:从列表中选择服务器
  3. 添加新参数“主动选择反应参数” 名称:备份 脚本:Groovy脚本 def getbackupsqa =(“ sshpass -f /opt/installer/pass.txt / usr / bin / ssh -p 22 -o StrictHostKeyChecking = no myuser@111.22.33.44 ls /opt/jenkins/backup").execute()

if(Server.equals(“ Choose ..”)){返回['Choose ..']} 否则,如果(Server.equals(“ qa”)){返回getbackupsqa.text.readLines()} 否则if(Server.equals(“ staging”)){返回['尚未配置的登台服务器']} 否则,如果(Server.equals(“ master”)){返回['尚未配置主服务器']}

说明:从列表中选择备份 参考参数:服务器

The result as here