首页 > 解决方案 > 如何将自定义 HTML+js 代码传递到 Jenkins 输入步骤页面?

问题描述

我正在尝试在管道库中的 Jenkins“输入步骤”中实现灵活的 UI,目前我正在使用扩展选择参数插件(https://wiki.jenkins.io/display/JENKINS/Extended+Choice+Parameter+plugin) ,它建立在 Json 编辑器库 ( https://github.com/json-editor/json-editor ) 之上,用于提供各种 HTML 输入元素(从 JSON 模式创建)并生成 JSON 输出。

“输入步骤”是否可以接受一些 html 模板代码来填充数据,在构建过程中收集并在“输入步骤”页面上使用一些自定义 HTML 元素和 js 绑定打印它,超出“扩展选择参数”提供的输入表单?

现在我正在通过 groovy 共享库脚本生成动态下拉列表,但无法使其打印在“输入步骤页面”非输入元素上。

我在输入步骤中需要的示例

标签: jenkinsinputgroovyjenkins-pipeline

解决方案


一切都很简单,ExtendedChoiceParameterDefinition 有参数“String javascript”,它可以接受任何 js 字符串,不仅可以为 Json-editor 返回 JSON 字符串,还可以修改输入页面本身。

示例管道:

stage('UserInput'){
        steps {
            script {
                    //...groovy script is omitted, it need only return json in valid form
                    def jsString = '''
                    var bodyElement = document.createElement('div');
                    bodyElement.innerHTML = '<h1 id="title">Some Title</h1><span style="display:inline-block; width=100px;">Some arbitrary text</span>';
                    document.getElementsByTagName('body')[0].appendChild(bodyElement);'''
                    def jsonParams = new ExtendedChoiceParameterDefinition(
                        'Cookbooks', //String name,
                        'PT_JSON', //String type,
                        null, //String value,
                        null, //String projectName,
                        null, //String propertyFile,
                        jsonGroovyScript, //String groovyScript (that returns JSON for generating Json-Input forms),
                        null, //String groovyScriptFile,
                        "jsonText=$jsonText", //String bindings,
                        '', //String groovyClasspath,
                        null, //String propertyKey,
                        null, //String defaultValue,
                        null, //String defaultPropertyFile,
                        null, //String defaultGroovyScript,
                        null, //String defaultGroovyScriptFile,
                        null, //String defaultBindings,
                        null, //String defaultGroovyClasspath,
                        null, //String defaultPropertyKey,
                        null, //String descriptionPropertyValue,
                        null, //String descriptionPropertyFile,
                        null, //String descriptionGroovyScript,
                        null, //String descriptionGroovyScriptFile,
                        null, //String descriptionBindings,
                        null, //String descriptionGroovyClasspath,
                        null, //String descriptionPropertyKey,
                        null, //String javascriptFile,
                        jsString, //String javascript (js code that modify input page itself),
                        false, //boolean saveJSONParameterToFile,
                        false, //boolean quoteValue,
                        10, //int visibleItemCount,
                        '', //String description,
                        ',' //String multiSelectDelimiter
                    ))
                    parameterList << jsonParams
                    def form = input(
                        id: 'form', message: 'input parameters', parameters: parameterList
                    ) // generating input page step and store it in "form" var
                    env.FORM = form
                }
              }
            }

推荐阅读