我们正在使用Jenkins多分支(基于脚本)管道来运行多个构建过程,以并行方式进行。每个构建过程将创建一个新的、独特命名的目录以检出代码并运行测试。这些目录是唯一命名的,因为它们包含了分支名称,还有一个随机部分,比如“JAA2A5HUZB7TRE4OTVXU7S...”。这意味着,在每个构建过程后,会有X个目录保留在Jenkins节点上(其中X=并行作业数*分支数),占满了磁盘空间。
我想知道如何自动删除这些目录。我的初始管道的简化版本如下:
我首先像这样添加了
输出结果为:
但是目录/srv/jenkins/workspace/pipeline-deletedir-DRD7EKBEMMWJQZW6KKMQVVBTJTPTKLRAE2ITDK7V7IB5PTFXZUZA仍然存在。
我正在寻找任何解决方案,以使这个脚本流水线(如果您知道如何做到声明性流水线)能够删除构建创建的所有目录。
我想知道如何自动删除这些目录。我的初始管道的简化版本如下:
// Initialize the matrix
def matrix = [
'foo',
'bar',
]
// Initialize empty tasks map
def tasks = [:]
// Job status
successful = true
// Fill our tasks map from the Matrix data
for (x in matrix) {
def job_name = x
tasks[job_name] = {
node('libvirt') {
// Checkout repository first
stage("$job_name - Checkout") {
checkout scm
}
// Then build the machine
gitlabCommitStatus('build') {
stage("$job_name - Build") {
sh "./bin/build.sh ${job_name}"
}
}
}
}
}
}
//// Pipeline ////
notifyBuild('STARTED')
// Run tasks in parallel
try {
parallel tasks
} catch(e) {
throw e
} finally {
if (successful) {
notifyBuild('SUCCESS')
} else {
notifyBuild('FAILED')
}
}
// Methods
def notifyBuild(String buildStatus = 'STARTED') {
// used to send formatted e-mails
}
我首先像这样添加了
deleteDir()
} finally {
if (successful) {
notifyBuild('SUCCESS')
} else {
notifyBuild('FAILED')
}
node('libvirt') {
deleteDir()
}
}
如果出现错误,构建将失败。
然后我添加了一个像这样的cleanWs()
。
} finally {
if (successful) {
notifyBuild('SUCCESS')
} else {
notifyBuild('FAILED')
}
node('libvirt') {
cleanWs()
}
}
输出结果为:
Running on node in /srv/jenkins/workspace/pipeline-deletedir-DRD7EKBEMMWJQZW6KKMQVVBTJTPTKLRAE2ITDK7V7IB5PTFXZUZA
[Pipeline] {
[Pipeline] step
[WS-CLEANUP] Deleting project workspace...[WS-CLEANUP] done
[Pipeline] }
[Pipeline] // node
[Pipeline] End of Pipeline
Finished: SUCCESS
但是目录/srv/jenkins/workspace/pipeline-deletedir-DRD7EKBEMMWJQZW6KKMQVVBTJTPTKLRAE2ITDK7V7IB5PTFXZUZA仍然存在。
我正在寻找任何解决方案,以使这个脚本流水线(如果您知道如何做到声明性流水线)能够删除构建创建的所有目录。