Answers:
您可以将其deleteDir()
用作管道Jenkinsfile的最后一步(假设您没有更改工作目录)。
checkout scm
。
提到的解决方案deleteDir()
和cleanWs()
(如果使用工作空间清理插件)都可以使用,但是建议不要在额外的构建步骤中使用它通常不是理想的解决方案。如果构建失败并且管道中止,则永远不会到达此清理阶段,因此不会在失败的构建上清理工作空间。
=>在大多数情况下,您可能应该将其置于构建后的状态,例如always
:
pipeline {
agent any
stages {
stage('Example') {
steps {
echo 'Hello World'
}
}
}
post {
always {
cleanWs()
}
}
}
cleanWs()
post build archive命令之前,将其作为一步运行将其删除。 cleanWs()
应该最有可能总是作为后构建命令运行
post
部分,cleanWs()
可以安全地置于always
状况中,但最安全的地方是cleanup
状况内:post { cleanup { cleanWs() } }
实际上,deleteDir函数以递归方式删除当前目录及其内容。符号链接和结点将不被遵循,但将被删除。
要删除工作空间的特定目录,请将deleteDir步骤包装在dir步骤中。
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
])
此处有更多详细信息: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
就我而言,我想在构建开始时清除旧文件,但这是有问题的,因为源代码已被检出。
我的解决方案是要求git清除所有它不知道的文件(来自上一个版本):
sh "git clean -x -f"
这样一来,我就可以开始清理构建,如果失败,则不会清理工作区,因此很容易调试。
当前,在使用Jenkins kubernetes插件时,Deletedir()和cleanWs()均无法正常工作,已删除pod工作区,但主工作区仍然存在
当您在结帐欺诈之前有步骤清理工作区时,对于持久性分支应该不是问题。基本上,它将一遍又一遍地重用同一工作空间:但是当使用多分支管道时,主服务器将保留整个工作空间和git目录
我认为这应该与詹金斯有关,这里有什么启示吗?