gpt4 book ai didi

jenkins - Groovy 多行字符串插值空格

转载 作者:行者123 更新时间:2023-12-05 03:54:27 25 4
gpt4 key购买 nike

我正在尝试为 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://stackoverflow.com/a/19882917/7569335)。

这适用于简单的字符串,但一旦开始使用插值,它就会崩溃。不适用于常规变量,仅当您插入整个方法时。

最佳答案

作为变体 - 仅使用 stripMargin() 且仅在最终字符串上使用一次

String method2(String tier, String jobName) {
return """\
|Map downstreamJobs = [:]
|stage ("${jobName}-${tier}-\${region}_${jobName}") {
| test
|}
"""
}

static String simpleLog() {
return """\
|script {
| def user = env.BUILD_USER_ID
|}
"""
}

static String method1() {
return """\
|import jenkins.model.Jenkins
|currentBuild.displayName = "name"

${simpleLog()}
"""
}

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
}

另一个带有 trim() 和 stripIndent() 的变体

def method2(String tier, String jobName) {
return """
Map downstreamJobs = [:]
stage ("${jobName}-${tier}-\${region}_${jobName}") {
test
}
""".trim()
}

def simpleLog() {
return """
script {
def user = env.BUILD_USER_ID
}
""".trim()
}

def method1() {
return """
import jenkins.model.Jenkins
currentBuild.displayName = "name"
${simpleLog()}
""".trim()
}

def generateFullDeploymentPipelineCode() {
return """\
Text here
${method1()}
${method2("test1", "test2")}
""".stripIndent()
}

println(generateFullDeploymentPipelineCode())

关于jenkins - Groovy 多行字符串插值空格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60997315/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com