Каждый сбой l oop в Groovy конвейере DSL для Jenkins Jobs Builder - PullRequest
0 голосов
/ 03 апреля 2020

Я пытаюсь создать динамические c этапы конвейера заданий Jenkins, основанные на массиве значений, но я не могу заставить функционировать l oop, как ожидалось, он жалуется на синтаксис, который я использую, но Я не могу понять, это Groovy проблема?

Подход

uat_nodes:
    - 'node1'
    - 'node2'
dsl: |
    stage('Update UAT dist') {{
        build job: '{key}-{module}-DP-BuildNamedDist-UAT'
    }}
    def UAT_NODES = {uat_nodes}
    UAT_NODES.each { UAT_NODE ->
        stage('Deploy code to UAT node: ' . ${{UAT_NODE}}) {{
            build job: '{key}-{module}-DP-UAT-Nodes', parameters: [
                string(name: 'LIMIT', value: '${{UAT_NODE}}'),
                string(name: 'PLAYBOOK', value: '{playbook}')
            ]
        }}
    }

Ошибка

WorkflowScript: 8: Ambiguous expression could be either a parameterless closure expression or an isolated open code block;
   solution: Add an explicit closure parameter list, e.g. {it -> ...}, or force it to be treated as an open block by giving it a label, e.g. L:{...} @ line 8, column 56.
   e to UAT node: ' . ${{UAT_NODE}}) {{

1 Ответ

0 голосов
/ 03 апреля 2020

Как гласит ошибка, существует проблема с этим фрагментом кода: . ${{UAT_NODE}}

Если у строк будет метод $, который вызовет его с замыканием внутри замыкания, которое возвращает UAT_NODE.

Я могу только предположить, что вы хотите объединить строки, подобные perl или php. Это не так, как это работает в groovy.

Использование: "Deploy code to UAT node: ${UAT_NODE}". Обратите внимание на двойные кавычки "! Одинарные кавычки ' не заменят вас (это каждая вторая строка, которую вы используете в своем коде).

...