首页 > 解决方案 > Jenkins Jobs Builder 的 Groovy DSL Pipeline 中的每个循环都失败

问题描述

我正在尝试基于一组值创建动态 Jenkins 作业管道阶段,但我似乎无法让循环按预期运行,它抱怨我正在使用的语法,但我无法弄清楚,是这是一个 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}}) {{

标签: jenkinsgroovyjenkins-job-dsl

解决方案


正如错误所述,这段代码存在问题:. ${{UAT_NODE}}

如果字符串有一个$方法,它会在闭包内使用闭包调用它,并返回 UAT_NODE。

我只能假设,你想在这里连接字符串,类似于 perl 或 php。这不是它在 groovy 中的工作方式。

用途:"Deploy code to UAT node: ${UAT_NODE}"注意双引号"!单引号'不会给您替换(这是您在代码中使用的所有其他字符串)。


推荐阅读