2016-08-10 5 views
0

Я пытаюсь сделать простой хозяйственный трубопровод, чтобы удалить старые рабочие пространства в Jenkins.Jenkins .eachDir() итерация только один раз

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. У меня также был googled, где были такие проблемы, как с итератором .each, но это должно быть исправлено?

Большое спасибо Михал

+0

какая у вас версия для jenkins? –

+0

последний один @YuriG. – user3278960

ответ

0

Это известная проблема с Дженкинс трубопроводов (бывшие рабочие процессы), и это подано в JIRA, как JENKINS-26481.

Обратите внимание, что в рабочем процессе Дженкинс происходит много за кулисами; после каждой строки Jenkins сохраняет состояние рабочего процесса (положение в циклах, локальные переменные и т. д.), чтобы иметь возможность пережить неудачу и возобновить обработку. Вот почему фиксация этой проблемы в Jenkins не является тривиальной.

Для вас есть простой способ - просто переместите логику в отдельную функцию с помощью аннотации @NonCPS.

Дополнительная информация доступна в plugin documentation.

+0

Спасибо, аннотация @NonCPA исправила это для меня. – user3278960