Производство Дженкинс Протрите Рабочую Область
мы запускаем Дженкинс 2.x и люблю новый плагин конвейера. Однако, с таким количеством ветвей в репозитории, дисковое пространство быстро заполняется.
есть ли плагин, совместимый с конвейером, который я могу уничтожить рабочее пространство при успешной сборке?
9 ответов:
можно использовать
deleteDir()
как последний шаг конвейера Jenkinsfile (предполагая, что вы не изменили рабочий каталог).
как @gotgenes указал, с Версия Дженкинс. 2.74, ниже работает, не уверен, с каких пор, может быть, если кто-то может редактировать и добавлять версию выше
cleanWs()
С Дженкинс Версия 2.16 и Плагин Очистки Рабочего Пространства, что у меня есть, я использую
step([$class: 'WsCleanup'])
для удаления рабочей области.
вы можете просмотреть его, перейдя в
JENKINS_URL/job/<any Pipeline project>/pipeline-syntax
затем выберите "шаг: общий шаг сборки" из Пример шага, а затем выберите "Удалить рабочую область, когда сборка завершена" из шага сборки
фактически функция deleteDir рекурсивно удаляет текущий каталог и его содержимое. Символические ссылки и соединения не будут соблюдаться, но будут удалены.
для удаления определенного каталога рабочей области оберните шаг deleteDir в шаг dir.
dir('directoryToDelete') { deleteDir() }
указанные решения
deleteDir()
иcleanWs()
(при использовании плагин очистки рабочего пространства) оба работают, но рекомендация использовать его в дополнительном шаге сборки обычно не является желаемым решением. Если сборка завершается неудачно и конвейер прерывается, этот этап очистки никогда не достигается, и поэтому рабочая область не очищается при неудачных сборках.=> В большинстве случаев вы, вероятно, следует положить его в условие пост-строени-шага как
always
:pipeline { agent any stages { stage('Example') { steps { echo 'Hello World' } } } post { always { cleanWs() } } }
мы удостоверяемся, что работаем с чистым рабочим пространством, используя функцию плагина git. Вы можете добавить дополнительные поведения, такие как "очистить перед проверкой". Мы используем это также для "чернослив черствых ветвей дистанционного отслеживания".
я использовал deleteDir() следующим образом:
post { always { deleteDir() /* clean up our workspace */ } }
однако, я тогда должен был также запустить успех или неудачу после всегда, но вы не можете заказать условия post. Текущий порядок всегда изменяется, прерывается, терпит неудачу, успех, а затем неустойчив.
однако, есть очень полезное условие post,очистка который всегда работает последним, см. https://jenkins.io/doc/book/pipeline/syntax/
Так что в конце концов мой пост был следующим :
post { always { } success{ } failure { } cleanup{ deleteDir() } }
надеюсь, это может быть полезно для некоторых случаях угол
очистка: поскольку почтовая секция конвейера гарантированно запускается в конце выполнения конвейера, мы можем добавить некоторые уведомления или другие шаги для выполнения завершения, уведомления или других задач конца конвейера.
pipeline { agent any stages { stage('No-op') { steps { sh 'ls' } } } post { cleanup { echo 'One way or another, I have finished' deleteDir() /* clean up our workspace */ } } }
использование расширения "WipeWorkspace", похоже, тоже работает. Для этого требуется более длинная форма:
checkout([ $class: 'GitSCM', branches: scm.branches, extensions: scm.extensions + [[$class: 'WipeWorkspace']], userRemoteConfigs: scm.userRemoteConfigs ])
подробнее здесь: https://support.cloudbees.com/hc/en-us/articles/226122247-How-to-Customize-Checkout-for-Pipeline-Multibranch-
доступные расширения GitSCM здесь: https://github.com/jenkinsci/git-plugin/tree/master/src/main/java/hudson/plugins/git/extensions/impl