本文根据Jenkins-2.272版本进行测试, 不保证一直有效!!!
由于项目使用参数化构建, 而且参数比较多, 一屏幕都放不下了..... 所以寻求方法来只显示重要参数.
需求
模拟一个需求(如图1,图2):
- 当value1选中时, value2可输入, value3不可输入
-
当value1未选中时, value2可不输入, value3可输入
现在想要优化一下这个需求:
- 当value1选中时, value2可输入, value3不可输入并且value3隐藏
- 当value1未选中时, value3可输入, value2可不输入并且value3隐藏
解决方案
首先来看一下jenkins参数页的HTML是什么样子的
Artive Choices 插件其实是把每一个参数整体包装成
<div class="tr form-group">...</div>
那我们就在配置项里尝试获取一下这个div
, 在VALUE2
的Groovy 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=""'>
"""
}
最终运行结果如下图:
更多复杂功能按照这个方式可以继续拓展