Jenkins Artive Choices Plugin. 动态隐藏/显示参数

本文根据Jenkins-2.272版本进行测试, 不保证一直有效!!!

由于项目使用参数化构建, 而且参数比较多, 一屏幕都放不下了..... 所以寻求方法来只显示重要参数.

需求

模拟一个需求(如图1,图2):

  • 当value1选中时, value2可输入, value3不可输入
  • 当value1未选中时, value2可不输入, value3可输入


    图1

    图2

现在想要优化一下这个需求:

  • 当value1选中时, value2可输入, value3不可输入并且value3隐藏
  • 当value1未选中时, value3可输入, value2可不输入并且value3隐藏

解决方案

首先来看一下jenkins参数页的HTML是什么样子的

图3

Artive Choices 插件其实是把每一个参数整体包装成<div class="tr form-group">...</div>

那我们就在配置项里尝试获取一下这个div, 在VALUE2Groovy Script中写入一下代码, 给input定义一个id

return """
  <input name="value" id="VALUE2"  value="VALUE2">
"""

先尝试添加<script>看能否执行.

return """
  <input name="value" id="VALUE2"  value="VALUE2">
  <script>
  console.log("执行~~")
  </script>
"""

看到控制台并没有打印, 知道内部应该是吧脚本返回的字符串 赋值给了innerHTML,

尝试其他方法绕过innerHTML限制

return """
  <input name="value" id="VALUE2"  value="VALUE2">
  <img src="error/image/url" style="display: none;" onerror="console.log('可以执行')">
"""

改成上面代码之后重新加载参数页, 控制台成功看到了打印结果, 证明此方法可行.

最终修改代码:

VALUE2改为:

if (VALUE1) {
    return """
  <input name="value" id="VALUE2"  value="VALUE2">
  <img src="error/image/url" style="display: none;" onerror='document.getElementById("VALUE2").closest(".form-group").style.display=""'>
"""  
} else {
  return """
  <input name="value" id="VALUE2"  value="VALUE2">
  <img src="error/image/url" style="display: none;" onerror='document.getElementById("VALUE2").closest(".form-group").style.display="none"'>
""" 
}

VALUE3改为:

if (VALUE1) {
    return """
  <input name="value" id="VALUE3"  value="VALUE3">
  <img src="error/image/url" style="display: none;" onerror='document.getElementById("VALUE3").closest(".form-group").style.display="none"'>
"""  
} else {
  return """
  <input name="value" id="VALUE3"  value="VALUE3">
  <img src="error/image/url" style="display: none;" onerror='document.getElementById("VALUE3").closest(".form-group").style.display=""'>
""" 
}

最终运行结果如下图:

result.gif

更多复杂功能按照这个方式可以继续拓展

推荐阅读更多精彩内容