Поиск вложенных карт в dsl конвейера заданий jenkins - PullRequest
0 голосов
/ 18 октября 2019

Я хочу запустить команду в конвейере 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 { """

Исходя из моего понимания, если я экранирую $, то эта часть цикладействует как строка. поэтому сообщение об ошибке в этом случае бесполезно

...