我正在尝试生成一些通用的Jenkins Groovy代码,但似乎在多行字符串和额外空格上遇到了问题。我已经尝试了通过谷歌搜索找到的所有方法,但好像不能让它正常工作。
我的问题不是简单的多行字符串相关。对于简单情况,我使用stripIndent()和stripMargin()方法来裁剪空白字符。我的问题是由于字符串中有插值方法而引起的。
Groovy信息:Groovy版本:3.0.2 JVM:13.0.2 厂商:Oracle Corporation 操作系统:Mac OS X
String method2(String tier, String jobName) {
return """
Map downstreamJobs = [:]
stage ("${jobName}-${tier}-\${region}_${jobName}") {
test
}
""".stripIndent().stripMargin()
}
static String simpleLog() {
return """
script {
def user = env.BUILD_USER_ID
}
""".stripIndent().stripMargin()
}
static String method1() {
return """\
import jenkins.model.Jenkins
currentBuild.displayName = "name"
${simpleLog()}
""".stripIndent().stripMargin()
}
String generateFullDeploymentPipelineCode() {
return """Text here
${method1()}
${method2("test1", "test2")}
""".stripIndent().stripMargin()
}
println(generateFullDeploymentPipelineCode())
这是它所打印的内容(或写入磁盘):
Text here
import jenkins.model.Jenkins
currentBuild.displayName = "name"
script {
def user = env.BUILD_USER_ID
}
Map downstreamJobs = [:]
stage ("test2-test1-${region}_test2") {
test
}
为什么导入行周围会有额外的空格?我知道缩进方法应该根据最少数量的前导空格修剪所有空格,所以这就是我们使用反斜杠的原因(例如在此处https://dev59.com/lmIj5IYBdhLWcg3wy3_H#19882917)。这对于简单字符串有效,但一旦你开始使用插值,它就会出现问题。并不是常规变量,而是当你插入整个方法时。