我在Jenkins的一些高级参数输入中使用DynamicReferenceParameter。这是一个很小的例子,我使用UI输入:
这很好用,我的复选框和输入字段确实显示出来!
但是当我尝试在我的Jenkinsfile中定义我的参数时,我收到一个错误。我的Jenkinsfile看起来像这样:
properties([parameters([
[
$class: 'DynamicReferenceParameter',
name: 'SFM',
script: [
$class: 'GroovyScript',
fallbackScript: '',
script: """
def services = ['service1',
'service2',
'service3']
def html =
'''
<!DOCTYPE html>
<html>
<body>
<table id="serviceTable">
'''
for (service in services){
html += "<tr>"
html += "<td><input type=\"checkbox\" id=\"checkbox_$service\">$service</td>"
html += "<td><div id=\"version_$service\" >version: <input type=\"text\"></div></td>"
html += "</tr>"
}
html += '''
</table>
</body>
</html>
'''
return html
"""
]
]
])])
你看,我只是从UI输入中复制并粘贴脚本并用"""
包围它。
这导致错误号。 1:
Groovy.lang.MissingPropertyException: No such property: service for class: WorkflowScript
因此解析我的变量时出错。
所以我只是试图删除所有变量并设置静态值(用$service
替换service1
)。这导致错误号。 2:
java.lang.ClassCastException: org.biouno.unochoice.model.GroovyScript.script expects class org.jenkinsci.plugins.scriptsecurity.sandbox.groovy.SecureGroovyScript but received class java.lang.String
at org.jenkinsci.plugins.structs.describable.DescribableModel.coerce(DescribableModel.java:416)
at org.jenkinsci.plugins.structs.describable.DescribableModel.buildArguments(DescribableModel.java:340)
at org.jenkinsci.plugins.structs.describable.DescribableModel.instantiate(DescribableModel.java:281)
Caused: java.lang.IllegalArgumentException: Could not instantiate {fallbackScript=, script=[...]
我做错了什么?
script
和fallbackScript
不是真正的String。他们正在使用安全脚本插件类(已经有一段时间了)。
这里有一些可能有用的代码片段。
properties([parameters([
[
$class: 'DynamicReferenceParameter',
name: 'TEST',
script: [
$class: 'GroovyScript',
fallbackScript: [
classpath: [], sandbox: true, script: ''
],
script: [
classpath: [], sandbox: true, script:
"""
def html =
'''
<!DOCTYPE html>
<html>
<body>
<table id="serviceTable">
<tr>
<td><input type="checkbox" id="checkbox">service1</td>
<td><div id="version" >version: <input type="text"></div></td>
</tr>
</table>
</body>
</html>
'''
return html
"""
]
]
]
])])
ps:带上一粒盐,因为我通常只使用FreeStyle工作。我想有些人尝试使用带有管道的插件,但据我所知,它仍然是一个正在进行的工作(例如参见https://issues.jenkins-ci.org/browse/JENKINS-39742)
希望有所帮助,布鲁诺