14

该脚本没有遍​​历“模块”数组的所有值。

class Module {
    public String name = '';
    public Boolean isCustom = false;
    public Module(String name, Boolean custom){
        this.name = name;
        this.isCustom = custom;
    }
}

//creates array from the ext_module env var
modules = [];
EXT_MODULE.split(',').each { 
    modules.add(new Module(it, false));
}


println modules;
modules.each {  
    println "MODULE NAME ::::: ${it.name}"
    if(it.isCustom)
    {
        println "install custom";
    } else {
        println "install non custom";
    }
};

这是运行的结果。该数组显示 4 个元素,但 .each black 中的代码只执行一次。

运行:打印消息 [Module@71f09325, Module@e1ddb41, Module@7069a674, Module@1f68f952]
运行:打印消息 MODULE NAME ::::: puppetlabs-ntp
运行:打印消息安装非自定义
运行:工作流程结束
完成:成功

4

3 回答 3

10

消息“运行:打印消息”和“运行:工作流程结束”表明您正在使用新的工作流程插件:https ://wiki.jenkins-ci.org/display/JENKINS/Workflow+Plugin 。这个插件目前有一个错误,导致至少一些涉及闭包的 Groovy 迭代在一次迭代后被中止:https ://issues.jenkins-ci.org/browse/JENKINS-26481

于 2015-01-21T08:46:53.120 回答
4

解决方法是简单地使用老式的 for loop (code below)。此外,NonCPS 是另一种解决方法。这件事有一个悬而未决的问题。见这里:https ://issues.jenkins-ci.org/browse/JENKINS-26481

更新,2016 年 10 月 24 日

/** * 使用老式的 for 循环将环境变量转储到日志中。 */

import com.cloudbees.groovy.cps.NonCPS

def version = '1.0'

@NonCPS
def dumpEnvVars() {
  def str = "Dumping build environment variables...\n"
  for (Map.Entry<String, String> entry : currentBuild.build().environment) {
    str += "    ${entry.key} = ${entry.value}\n"
  }
  echo str
}

return this;
于 2016-03-04T20:23:06.307 回答
0

截至昨天,新的 Pipeline 插件在 2.0 版本中交付并纠正了这个问题。

.each闭包现在可以工作,但.collect仍然只迭代一次。

于 2016-04-07T07:06:45.273 回答