Производство Дженкинс Протрите Рабочую Область


мы запускаем Дженкинс 2.x и люблю новый плагин конвейера. Однако, с таким количеством ветвей в репозитории, дисковое пространство быстро заполняется.

есть ли плагин, совместимый с конвейером, который я могу уничтожить рабочее пространство при успешной сборке?

9 78

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

использовать мерзавец мелкий клон на расширенное поведение клонов
enter image description here

и другой подход заключается в очистке дерева с помощью git clean -fdx