You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

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

火山引擎 最新活动