Groovy Pipeline多行文本参数空格注入问题求解
解决Groovy Pipeline多行文本参数注入空格的问题
这个问题我之前在配置Groovy Pipeline的多行参数时也踩过坑!核心原因是Groovy会保留多行字符串里的缩进空格,当你没有左对齐参数内容时,这些缩进会被当作参数值的一部分带入,导致出现多余空格。下面给你几个靠谱的解决办法:
方法1:使用stripIndent()移除公共缩进
Groovy的多行字符串支持stripIndent()方法,它会自动去掉每行开头的公共缩进空格,完美解决缩进带来的空格注入问题。结合你的EnvInjectJobProperty代码,修改如下:
node { def startTime = new Date() println "Build start time : " + startTime // Load system parameters def projectProperties = [ [$class: 'EnvInjectJobProperty', info: [ loadFilesFromMaster: false, secureGroovyScript: [ script: ''' def MY_MULTILINE_PARAM = """ line1 line2 line3 """.stripIndent() '''.stripIndent() // 处理外层脚本的缩进,让代码更整洁 ] ]] ] }
解释:
- 内层的
""".stripIndent()会把line1/line2/line3前面的公共缩进去掉,确保参数值没有多余空格 - 外层的
.stripIndent()可以清理脚本字符串本身的缩进,避免脚本内容出现不必要的空白
方法2:手动左对齐多行文本内容
如果不想用字符串方法,也可以直接把多行参数的内容完全左对齐,从根源上避免缩进带来的空格:
node { def startTime = new Date() println "Build start time : " + startTime // Load system parameters def projectProperties = [ [$class: 'EnvInjectJobProperty', info: [ loadFilesFromMaster: false, secureGroovyScript: [ script: ''' def MY_MULTILINE_PARAM = """ line1 line2 line3 """ ''' ] ]] ] }
这种方式虽然代码缩进看起来不太规整,但能直接规避空格注入问题,适合对格式要求不高的场景。
额外提醒:直接用Pipeline的parameters块时的处理
如果你是直接在Pipeline的parameters块中定义多行文本参数,同样适用上面的两种方法:
用stripIndent()的写法:
parameters { text( name: 'MY_MULTILINE_TEXT', defaultValue: """ This is line 1 This is line 2 This is line 3 """.stripIndent(), description: 'Multiline text parameter without extra spaces' ) }
手动左对齐的写法:
parameters { text( name: 'MY_MULTILINE_TEXT', defaultValue: """ This is line 1 This is line 2 This is line 3 """, description: 'Multiline text parameter without extra spaces' ) }
核心思路就是:让多行文本的实际内容避免不必要的缩进,或者用Groovy的字符串方法自动清除缩进空格,这样就能解决参数值被注入空格的问题了。
内容的提问来源于stack exchange,提问作者Theo Sweeny




