我在groovy中有一个Jenkinsfile脚本,它正在处理Java应用程序的application.properties
文件,我刚刚用
spring.main.banner-mode: off
在脚本中,我使用Jenkins外接程序库application.properties
将yamlRead
文件读入内存中的映射,然后再次将值输出到另一个文件中,但结果为:>
spring.main.banner-mode: false
这会在启动时中断Java程序,并显示讨厌的spring boot错误。 spring boot变量期望为OFF,FILE或CONSOLE。
我无法更改yamlRead
,但可以更改如下所示的输出脚本:
yaml.each {
key, value -> B: {
// some processing...
sh "echo '$base$key=$value' >> $file"
}
}
}
如何确定地图实际上是否具有布尔类型(因为我无法更改它,所以这很不好)还是不希望的布尔值转换发生在myy echo >> file
中?
或者我能以某种方式强迫groovy在读取输入时不推断布尔值吗,也许在“ off”前后加上引号?
答案 0 :(得分:4)
一切正常。 Groovy不是您的问题,它是YAML。 YAML参考资料指出,如您在此处看到的,“ off”被解释为“ false”
Jenkins yamlRead读取'off'并将其转换为值为'false'的布尔值。
答案 1 :(得分:1)
如Thomas所写:off
是布尔值false
的yaml格式的保留字
不过,您可以引用它来将其强制为字符串:
spring.main.banner-mode: 'off'
在这种情况下,spring.main.banner-mode
键将具有字符串值off
要检查布尔值false
,可以使用类似以下内容的方法:
yaml.each {
key, value -> B: {
// some processing...
sh "echo '$base$key=${ value==false? 'off' : value }' >> $file"
}
}
PS:
而不是调用sh
将一个键值附加到文件,您可以使用以下代码:
def values = yaml.collect{k,v-> "$k=$v"}.join("\n")
writeFile( file: file, text: values )