Подтвердить что ты не робот

Труба Jenkins вытесняет рабочее пространство

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

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

4b9b3361

Ответ 1

Вы можете использовать deleteDir() в качестве последнего шага файла Jenkins в конвейере (при условии, что вы не изменили рабочий каталог).

Ответ 2

Как @gotgenes указал на версию Jenkins. 2.74, ниже работает, не уверен с того момента, когда, может быть, если кто-то может отредактировать и добавить версию выше

cleanWs()

С Jenkins версии 2.16 и Плагин очистки рабочей области, который у меня есть, я использую

step([$class: 'WsCleanup'])

для удаления рабочей области.

Вы можете просмотреть его, выбрав

JENKINS_URL/job/<any Pipeline project>/pipeline-syntax

Затем выберите "Шаг: общий шаг сборки" на шаге "Шаг", а затем выберите "Удалить рабочее пространство при выполнении сборки" с этапа сборки

Ответ 3

Фактически функция deleteDir рекурсивно удаляет текущий каталог и его содержимое. Символические ссылки и соединения не будут соблюдаться, но будут удалены.

Чтобы удалить конкретный каталог рабочей области, переместите шаг deleteDir на шаг dir.

dir('directoryToDelete') {
    deleteDir()
}

Ответ 4

Упомянутые решения deleteDir() и cleanWs() (если используется плагин очистки рабочего пространства) работают, но рекомендация использовать его на дополнительном этапе сборки обычно не является желаемым решением. Если сборка завершается неудачно и конвейер прерывается, этот этап очистки никогда не достигается, и, следовательно, рабочая область не очищается при неудачных сборках.

=> В большинстве случаев вам, вероятно, следует поместить его в состояние после сборки, как always:

pipeline {
    agent any
    stages {
        stage('Example') {
            steps {
                echo 'Hello World'
            }
        }
    }
    post { 
        always { 
            cleanWs()
        }
    }
}

Ответ 5

Я использовал deleteDir() следующим образом:

  post {
        always {
            deleteDir() /* clean up our workspace */
        }
    }

Тем не менее, мне также приходилось всегда запускать Успех или Неудачно ПОСЛЕ, но вы не можете заказать условия публикации. Текущий заказ всегда изменен, отменен, сбой, успех, а затем нестабильный.

Тем не менее, есть очень полезный пост состояние, очистки, который всегда работает, наконец, увидеть https://jenkins.io/doc/book/pipeline/syntax/

Итак, в итоге мой пост был следующим:

post {
    always {

    }
    success{

    }
    failure {

    }
    cleanup{
        deleteDir()
    }
}

Надеюсь, это может быть полезно для некоторых угловых случаев

Ответ 6

Используя следующий конвейерный скрипт:

pipeline {
    agent { label "master" }
    options { skipDefaultCheckout() }
    stages {
        stage('CleanWorkspace') {
            steps {
                cleanWs()
            }
        }
    }
}

Следуй этим шагам:

  1. Перейдите к последней сборке конвейерного задания, из которого вы хотите очистить рабочее пространство.
  2. Нажмите на ссылку "Воспроизвести" в меню LHS.
  3. Вставьте вышеуказанный скрипт в текстовое поле и нажмите Run

Ответ 7

Если вы использовали пользовательское рабочее пространство в Jenkins, то deleteDir() не удалит папку @tmp.

Чтобы удалить @tmp вместе с рабочей областью, используйте следующую

pipeline {
    agent {
        node {
            customWorkspace "/home/jenkins/jenkins_workspace/${JOB_NAME}_${BUILD_NUMBER}"
        }
    }
    post {
        cleanup {
            /* clean up our workspace */
            deleteDir()
            /* clean up tmp directory */
            dir("${workspace}@tmp") {
                deleteDir()
            }
            /* clean up script directory */
            dir("${workspace}@script") {
                deleteDir()
            }
        }
    }
}

Этот фрагмент также будет работать для рабочей области по умолчанию.

Ответ 8

Мы следим за тем, чтобы мы работали с чистой рабочей областью, используя функцию плагина git. Вы можете добавить дополнительное поведение, например "Очистить до проверки". Мы также используем это для "Обрезанных ветвей удаленного отслеживания".

Ответ 9

Использование расширения 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

Ответ 10

Очистка. Так как секция post конвейера гарантированно будет запущена в конце выполнения конвейера, мы можем добавить некоторые уведомления или другие шаги для выполнения финализации, уведомления или других задач окончания конвейера.

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 */
        }
    }
}

Ответ 11

В моем случае я хочу очистить старые файлы в начале сборки, но это проблематично, так как исходный код был извлечен.

Мое решение - попросить git удалить все файлы (из последней сборки), о которых он не знает:

    sh "git clean -x -f"

Таким образом, я могу начать чистую сборку, и если она не удастся, рабочее пространство не будет очищено и поэтому легко отлаживается.

Ответ 12

Используйте Git Shallow Clone в расширенном поведении клонов
enter image description here

И другой подход - очистить дерево с помощью git clean -fdx