我们正在运行Jenkins 2.x并喜欢新的Pipeline插件。但是,如果存储库中有如此多的分支,则磁盘空间会很快填满。
是否有任何与Pipeline兼容的插件可以在成功构建时清除工作区?
答案 0 :(得分:99)
就像@gotgenes用 Jenkins Version指出的那样。 2.74 ,以下作品,不确定从什么时候开始,也许有人可以编辑并添加上面的版本
cleanWs()
使用 Jenkins版本2.16 和Workspace Cleanup Plugin,我使用
step([$class: 'WsCleanup'])
删除工作区。
您可以转到
查看JENKINS_URL/job/<any Pipeline project>/pipeline-syntax
然后选择&#34;步骤:一般构建步骤&#34;从Sample步骤开始,然后在构建完成时选择&#34;删除工作区&#34;来自构建步骤
答案 1 :(得分:82)
您可以使用deleteDir()
作为管道Jenkinsfile的最后一步(假设您没有更改工作目录)。
答案 2 :(得分:56)
实际上,deleteDir函数以递归方式删除当前目录及其内容。将不会遵循符号链接和联结,但将被删除。
要删除工作空间的特定目录,请在dir步骤中包装deleteDir步骤。
dir('directoryToDelete') {
deleteDir()
}
答案 3 :(得分:44)
上述解决方案deleteDir()
和cleanWs()
(如果使用workspace cleanup plugin)都可以正常工作,但建议在额外构建步骤中使用它通常不是理想的解决方案即可。如果构建失败并且管道中止,则永远不会到达此清理阶段,因此在失败的构建中不会清理工作区。
=&GT;在大多数情况下,您应该将其放在post-built-step condition always
:
pipeline {
agent any
stages {
stage('Example') {
steps {
echo 'Hello World'
}
}
}
post {
always {
cleanWs()
}
}
}
答案 4 :(得分:11)
我按如下方式使用deleteDir():
post {
always {
deleteDir() /* clean up our workspace */
}
}
但是,随后我必须始终始终执行成功或失败操作,但是您无法订购发布条件。 当前顺序总是,更改,中止,失败,成功然后不稳定。
但是,有一个非常有用的发布条件,清理,它总是最后运行,请参见https://jenkins.io/doc/book/pipeline/syntax/
所以最后我的帖子如下:
post {
always {
}
success{
}
failure {
}
cleanup{
deleteDir()
}
}
希望这对某些极端情况可能有用
答案 5 :(得分:4)
使用以下管道脚本:
pipeline {
agent { label "master" }
stages {
stage('CleanWorkspace') {
steps {
cleanWs()
}
}
}
}
请按照以下步骤操作:
答案 6 :(得分:3)
我们通过使用git插件的功能确保我们正在使用干净的工作区。您可以添加其他行为,例如&#39;结帐前清洁&#39;。我们也将此用于修剪陈旧的远程跟踪分支机构&#39;。
答案 7 :(得分:3)
对于Jenkins 2.190.1,这可以肯定地起作用:
post {
always {
cleanWs deleteDirs: true, notFailBuild: true
}
}
答案 8 :(得分:2)
Cleaning up:由于管道的post部分保证在Pipeline执行结束时运行,我们可以添加一些通知或其他步骤来执行最终化,通知或其他End-of-Pipeline任务
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 */
}
}
}
答案 9 :(得分:1)
使用&#39; WipeWorkspace&#39;扩展似乎也有效。它需要更长的形式:
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
答案 10 :(得分:0)
在高级克隆行为中使用 Git浅层克隆
另一种方法是使用git clean -fdx
答案 11 :(得分:0)
如果您在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()
}
}
}
}
此代码段也适用于默认工作空间。
答案 12 :(得分:0)
就我而言,我想在构建的开始处清除旧文件,但这是有问题的,因为源代码已被检出。
我的解决方案是要求git清除所有它不知道的文件(从上一版本开始)
sh "git clean -x -f"
这样,我就可以开始清理构建,如果失败,则不会清理工作区,因此很容易调试。
答案 13 :(得分:0)
使用Jenkins kubernetes插件时,目前deleteir()和cleanWs()均无法正常工作,已删除pod工作区,但主工作区仍然存在
当您在结帐欺诈之前有步骤清理工作区时,对于持久性分支应该不是问题。基本上,它将一遍又一遍地重复使用相同的工作空间:但是,当使用多分支管道时,主服务器将保留整个工作空间和git目录
我认为这应该与詹金斯有关, 这里有什么启示吗?
答案 14 :(得分:0)
pipeline {
agent any
tools {nodejs "node"}
environment {
}
parameters {
string(name: 'FOLDER', defaultValue: 'ABC', description: 'FOLDER', trim: true)
}
stages {
stage('1') {
steps{
}
}
stage("2") {
steps {
}
}
}
post {
always {
echo "Release finished do cleanup and send mails"
deleteDir()
}
success {
echo "Release Success"
}
failure {
echo "Release Failed"
}
cleanup {
echo "Clean up in post work space"
cleanWs()
}
}
}