保留引号的常规

时间:2019-11-20 22:17:27

标签: jenkins groovy

伙计们,   我正在遍历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]

谢谢

2 个答案:

答案 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()