답변:
deleteDir()
파이프 라인 Jenkinsfile의 마지막 단계로 사용할 수 있습니다 (작업 디렉토리를 변경하지 않았다고 가정).
checkout scm
.
@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()
}
}
}
cleanWs()
하며 단계 빌드로 실행하면 사후 빌드 아카이브 명령이 실행되기 전에 아티팩트가 삭제됩니다. cleanWs()
항상 빌드 후 명령으로 실행되어야합니다
post
섹션 이 하나만있는 경우 cleanWs()
안전하게 always
조건에 넣을 수 있지만 가장 안전한 지점이 cleanup
조건 내에 있습니다.post { cleanup { 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()
}
}
}
}
다음과 같이하세요:
options { skipDefaultCheckout() }
조금 더 빠른 실행을 위해 추가하십시오 .
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()
}
}
}
}
이 스 니펫은 기본 작업 공간에서도 작동합니다.
'WipeWorkspace'확장자를 사용하는 것도 효과가있는 것 같습니다. 더 긴 형식이 필요합니다.
checkout([
$class: 'GitSCM',
branches: scm.branches,
extensions: scm.extensions + [[$class: 'WipeWorkspace']],
userRemoteConfigs: scm.userRemoteConfigs
])
여기에서 사용 가능한 GitSCM 확장 : https://github.com/jenkinsci/git-plugin/tree/master/src/main/java/hudson/plugins/git/extensions/impl
정리 : 파이프 라인의 포스트 섹션은 파이프 라인 실행이 끝날 때 실행되도록 보장되므로 마무리, 알림 또는 기타 파이프 라인 종료 작업을 수행하기위한 알림 또는 기타 단계를 추가 할 수 있습니다.
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 */
}
}
}