Я хочу запустить команду в конвейере Jenkins, n раз на основе имеющегося у меня списка массивов. Тем не менее, код не выполняет цикл интерполяции в список
def srvlist = [
env : [
[
srv: "srvc1",
host: "host1",
schema: "schema1",
],
[
srv: "srvc12",
host: "host2",
schema: "schema2",
]
]
]
srvlist.each { env,configs ->
def pipeline = """
standardPipeline {
node('build'){
stage('pull docker') {
withCredentials([file(credentialsId: 'docker-config-json', variable: 'DOCKER_CONFIG_FILE')]) {
echo "Pulling Docker"
sh 'docker --config=\$(dirname "\$DOCKER_CONFIG_FILE") login https://docker.com'
${configs.collect { """
echo 'Downloading docker image'
sh 'docker --config=$(dirname "\$DOCKER_CONFIG_FILE") pull docker.com/${it.srv}:\$TAG'
sh 'docker save docker.com/${it.repository}:\$TAG > ${it.srv}.tar'
stash name: "${it.srv}.tar"
"""
}.join('\n')}
}
}
}
}
"""
ошибка составляет
org.codehaus.groovy.control.MultipleCompilationErrorsException: startup failed:
script: 105: illegal string body character after dollar sign;
solution: either escape a literal dollar sign "\$5" or bracket the value expression "${5}" @ line 105, column 39.
${configs.collect { """
Исходя из моего понимания, если я экранирую $
, то эта часть цикладействует как строка. поэтому сообщение об ошибке в этом случае бесполезно