Jenkins.eachDir()只迭代一次

Jenkins.eachDir()只迭代一次,jenkins,groovy,jenkins-workflow,jenkins-pipeline,Jenkins,Groovy,Jenkins Workflow,Jenkins Pipeline,我正在尝试做一个简单的内务处理管道来删除Jenkins中的旧工作区目录 node { stage 'Housekeeping stage' echo "Deleting all old cell directories, older then ${env.MAXIMUM_CELL_LIVE} days" new File("${env.phaser_dir}\\workspace\\").eachDir() { dir -> long diff = ne

我正在尝试做一个简单的内务处理管道来删除Jenkins中的旧工作区目录

node {
   stage 'Housekeeping stage'
   echo "Deleting all old cell directories, older then ${env.MAXIMUM_CELL_LIVE} days"
   new File("${env.phaser_dir}\\workspace\\").eachDir() { dir ->  
       long diff = new Date().getTime() - dir.lastModified()
       if (diff > env.MAXIMUM_CELL_LIVE.toInteger() * 24 * 60 * 60 * 1000) {
            dir.deleteDir()
        }
    }  
}
结果是每次只迭代一次,只删除一个目录

我有最新版本的Pipeline 2.2。我也曾在谷歌上搜索过
。每个
迭代器都有类似的问题,但这应该是固定的吗

非常感谢
Michal

这是Jenkins pipelines(以前的工作流)的一个已知问题,在JIRA存档为

请注意,在詹金斯的工作流程中,幕后发生了很多事情;在每行之后,Jenkins保存工作流的状态(循环中的位置、局部变量等),以便能够经受失败并恢复处理。这就是为什么在詹金斯内部解决这个问题不是件小事

不过,有一个简单的解决方法-只需使用
@NonCPS
注释将逻辑移到一个单独的函数中即可


有关更多信息,请访问。

您的jenkins版本是什么?最新版本@YuriG.谢谢,@NonCPA annotation已经为我修复了它。