Я пытаюсь сгенерировать какой-нибудь общий c Groovy код для Jenkins, но у меня, похоже, проблемы с многострочными строками и дополнительным пробелом. Я перепробовал все, что смог найти с помощью Google, но я не могу заставить его работать.
Моя проблема не связана с простыми многострочными строками. Мне удалось обрезать пустое пространство с помощью методов stripIndent () и stripMargin () для простых случаев. Моя проблема вызвана интерполяцией методов внутри моих строк.
Groovy info: Groovy Version: 3.0.2 JVM: 13.0.2 Vendor: Oracle Corporation OS: 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
}
Почему дополнительное пространство вокруг строк импорта? Я знаю, что метод отступа должен обрезать все пробелы в соответствии с наименьшим количеством начальных пробелов, поэтому мы используем backsla sh (пример здесь { ссылка }).
Это работает для простых строк, но не работает, если использовать start с использованием интерполяции. Не с обычными переменными, просто когда вы интерполируете весь метод.