在Pipeline中定义的DynamicReferenceParameter

问题描述 投票:0回答:1

我在Jenkins的一些高级参数输入中使用DynamicReferenceParameter。这是一个很小的例子,我使用UI输入:enter image description here

这很好用,我的复选框和输入字段确实显示出来!

但是当我尝试在我的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=[...]

我做错了什么?

jenkins jenkins-plugins jenkins-pipeline
1个回答
1
投票

scriptfallbackScript不是真正的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

希望有所帮助,布鲁诺

© www.soinside.com 2019 - 2024. All rights reserved.