在 Jenkins 声明式管道中:无法在 for 循环中迭代列表

问题描述 投票:0回答:1

我试图了解 Jenkins 管道脚本中发生的情况。我有这段代码,它采用一个值列表(最初是字符串,但更改为尝试简化/故障排除),迭代列表,将每个值存储到变量中并输出:

def CURR_VER
def NFS_VERS = [2, 3, 4, 4.1]

for (i in env.NFS_VERS) {
    env.CURR_VER = i
    echo env.CURR_VER
}

运行时,Jenkins 日志显示 echo 不仅输出值,还输出括号、逗号等(参见屏幕截图)。

Jenkins output

尝试更改 for 循环的格式,但似乎没有解决问题。

for-loop arraylist jenkins-groovy jenkins-declarative-pipeline
1个回答
0
投票

您正在迭代环境变量

env.NFS_VERS
,而不是定义的原始列表
NFS_VERS
。在管道中(但不是在多分支管道中!)Jenkins 自动将 Groovy 变量传播到环境变量中,但它们始终被解释为字符串。所以你的脚本只需要一个字符串并回显它的每个字符。

试试这个:

def CURR_VER
def NFS_VERS = [2, 3, 4, 4.1]

for (i in NFS_VERS) {
    env.CURR_VER = i
    echo env.CURR_VER
}

在多分支管道中,与您的脚本相同的脚本将不会打印任何内容,因为

env.NFS_VERS
将为空。

此外,如果您需要将某些内容打印到构建日志中,我建议使用

println
而不是
echo
,这样日志就不会被其他命令名称堵塞。

© www.soinside.com 2019 - 2024. All rights reserved.