jenkins - 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}}) {{
解决方案
正如错误所述,这段代码存在问题:. ${{UAT_NODE}}
如果字符串有一个$
方法,它会在闭包内使用闭包调用它,并返回 UAT_NODE。
我只能假设,你想在这里连接字符串,类似于 perl 或 php。这不是它在 groovy 中的工作方式。
用途:"Deploy code to UAT node: ${UAT_NODE}"
。 注意双引号"
!单引号'
不会给您替换(这是您在代码中使用的所有其他字符串)。
推荐阅读
- r - 根据 Shinyapps io 中的登录更改视图
- node.js - 为什么nodejs不将xhr设置为true?
- mysql - MySQL 将 2 个不同的表连接到第 3 个表
- java - 从 URL 读取的 Selenium Json 和 xml 使用 java 打开它的 get 方法
- r - 如何在 R Shiny 中使用垂直布局步进器?
- python - 从二维列表构建树层次结构
- javascript - 使用函数添加到现有的 xpath?
- javascript - 如何使用 JavaScript 返回查询 CSS 元素
- javascript - 你如何创建一个空闲会话计时器,用 react redux 将用户注销?
- reactjs - 从 PrimeReact 更改圆环图的标签位置