[jenkins] Jenkins 파이프 라인 작업 공간 정리

우리는 Jenkins 2.x를 실행 중이며 새로운 Pipeline 플러그인을 좋아합니다. 그러나 저장소에 분기가 너무 많으면 디스크 공간이 빠르게 채워집니다.

파이프 라인과 호환되는 플러그인이 있습니까? 성공적인 빌드에서 작업 공간을 지울 수 있습니까?



답변

deleteDir()파이프 라인 Jenkinsfile의 마지막 단계로 사용할 수 있습니다 (작업 디렉토리를 변경하지 않았다고 가정).


답변

@gotgenes가 Jenkins Version에서 지적한 것처럼 . 2.74 , 아래는 작동합니다. 언제든지, 누군가가 위의 버전을 편집하고 추가 할 수 있다면

cleanWs()

젠킨스 버전 2.16작업 공간 정리 플러그인 , 내가 가지고, 내가 사용

step([$class: 'WsCleanup'])

작업 공간을 삭제합니다.

당신은로 이동하여 그것을 볼 수 있습니다

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

그런 다음 샘플 단계에서 “단계 : 일반 빌드 단계”를 선택한 다음 빌드 단계에서 “빌드 완료시 작업 공간 삭제”를 선택하십시오.


답변

언급 된 솔루션 deleteDir()작업 공간 정리 플러그인을cleanWs() 사용하는 경우 둘 다 작동 하지만 추가 빌드 단계에서이를 사용하도록 권장하는 것은 일반적으로 원하는 솔루션이 아닙니다 . 빌드가 실패하고 파이프 라인이 중단되면이 정리 단계에 도달하지 않으므로 실패한 빌드에서 작업 공간이 정리되지 않습니다.

=> 대부분의 경우 다음 과 같은 빌드 후 단계 조건에 배치해야합니다 always.

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


답변

실제로 deleteDir 함수는 현재 디렉토리와 그 내용을 반복적으로 삭제합니다. 심볼릭 링크 및 접합은 따르지 않지만 제거됩니다.

작업 공간의 특정 디렉토리를 삭제하려면 dir 단계에서 deleteDir 단계를 랩핑하십시오.

dir('directoryToDelete') {
    deleteDir()
}


답변

다음과 같이 deleteDir ()을 사용했습니다.

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

그러나 그 후 항상 성공 또는 실패 후에도 실행해야했지만 사후 조건을 주문할 수는 없습니다. 현재 순서는 항상 변경, 중단, 실패, 성공 및 불안정합니다.

그러나, 매우 유용한 게시물에 조건이 정리 항상 마지막에 실행을 참조 https://jenkins.io/doc/book/pipeline/syntax/은

결국 내 게시물은 다음과 같습니다.

post {
    always {

    }
    success{

    }
    failure {

    }
    cleanup{
        deleteDir()
    }
}

희망적으로 이것은 일부 코너 경우에 도움이 될 수 있습니다


답변

다음 파이프 라인 스크립트 사용 :

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

다음과 같이하세요:

  1. 작업 공간을 정리하려는 최신 파이프 라인 작업 빌드로 이동하십시오.
  2. LHS 메뉴에서 재생 링크를 클릭하십시오.
  3. 위의 스크립트를 텍스트 상자에 붙여 넣고 실행을 클릭하십시오.

답변

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()
            }
        }
    }
}

이 스 니펫은 기본 작업 공간에서도 작동합니다.