Jenkins Pipline-遍历节点数组

时间:2018-06-19 16:06:47

标签: jenkins-pipeline

目标是建立动态管道。我有几个具有特定配置的节点。我想在他们的全部上建立我的工作,而不是保留节点数并且没有复制和粘贴。

下面的代码可以工作,但是会抛出exception。是否有已知的解决方法来完成动态管道? (说明性或类似此示例的脚本管道)

for (aSlave in hudson.model.Hudson.instance.slaves) {
    ActiveNode=aSlave.getLabelString()
    node(ActiveNode){

    node(aSlave.getLabelString()) { //java.io.NotSerializableException: hudson.plugins.libvirt.VirtualMachineLauncher

        stage(aSlave.name){
            echo 'Hello World'
        }
    }
  }
}

1 个答案:

答案 0 :(得分:3)

用@NonCPS注释的方法将方法返回的结果包装在不可序列化的对象中。

aSlave.getLabelString()不是罪魁祸首,而是aSlave。可能的解决方案是:

@NonCPS
def agentNames() {
  hudson.model.Hudson.instance.slaves.collect{[(it.labelString):(it.name)]}​
}

for (agent in agentNames()) {
  node(agent.keySet()[0]) {
    stage(agent.values()[0]){
      echo 'Hello World'
    }
  }
}