jenkins - 如何将自定义 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 共享库脚本生成动态下拉列表,但无法使其打印在“输入步骤页面”非输入元素上。
解决方案
一切都很简单,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
}
}
}
推荐阅读
- subscription - IoT 中心 iothubconnection 可能无法正常运行,因为它未处于活动状态
- linux - Ubuntu 无法升级到 20.04.1 LTS
- gitlab - Gitlab 新文件模板
- c# - 在 JSON 文件中查找 JArray/JObject 元素
- powershell - 在具有条件的数组值中获取数组
- python - 如何获得以下 python 代码来输出 worldmaps.info (似乎这个问题已得到回答,但对我不起作用)
- gitlab - 配置 Lerna 以将 NPM 包发布到私有 Gitlab 存储库
- postgresql - 在 postgres db 中,当未来的列数据(带时间戳)满足当前时间时,我们如何获得通知或触发器
- firebase - 实时数据库的 firebase 规则
- powershell - 管道安全组 Azure DevOps API