伙计们,
我正在遍历Jenkins的环境变量,并试图构建一个列表,然后传递给ytt
,然后生成Kubernetes yml。
如何构建一个保留引号的列表?即[foo.js, --delay, "40"]
def argList = []
argList.add(env.SCRIPT_NAME)
def args = env.SCRIPT_ARGS.split()
args.each { item ->
def arg = ""
if (item.isNumber()) {
arg = item.toString()
} else {
arg = item
}
argList.add(arg)
}
sh "echo scriptAndArgs: ${argList} >> values.yml"
当前,yml文件中的输出为scriptAndArgs: [foo.js, --delay, 40]
谢谢
答案 0 :(得分:2)
鉴于您要编写YAML(它是JSON的超集),最好的选择就是编写一个JSON数组:
groovy.json.JsonOutput.toJson(["a", "b", 40]*.toString())
// ===> ["a","b","40"]
这种方法还可以确保正确报价。
另一种偶然发生且内置的方法是inspect
,它试图将数据结构写得更接近人类输入的内容(这绝不是序列化,而只是用于调试和我不会在这里使用它)
["a", "b", 40]*.toString().inspect()
// ===> ['a', 'b', '40']
答案 1 :(得分:0)
def argString = "[" + env.SCRIPT_NAME
def args = env.SCRIPT_ARGS.split()
args.each { item ->
if (item.isNumber()) {
argString = argString + ',' + '"' + item + '"'
} else {
argString = argString + ',' + item
}
}
argString = argString + "]"
sh "echo scriptAndArgs: '${argString}' >> values.yml"
结果为scriptAndArgs: [.../foo.js,--delay,"40"]
这也绕开了Jenkins权限的限制,例如list.inspect()