Jenkins dsl插件删除作业时删除工作区
我正在使用jenkins dsl插件为项目的所有分支生成jenkins作业。当一个分支被删除时,dsl插件也会删除相应的jenkins作业 然而,问题是工作区并没有和作业一起删除,所以它们最终会把我的磁盘弄得乱七八糟。我发现的一个解决方案是定期列出所有工作区,并检查是否存在同名的jenkins作业Jenkins dsl插件删除作业时删除工作区,jenkins,jenkins-job-dsl,Jenkins,Jenkins Job Dsl,我正在使用jenkins dsl插件为项目的所有分支生成jenkins作业。当一个分支被删除时,dsl插件也会删除相应的jenkins作业 然而,问题是工作区并没有和作业一起删除,所以它们最终会把我的磁盘弄得乱七八糟。我发现的一个解决方案是定期列出所有工作区,并检查是否存在同名的jenkins作业 我想知道是否有更优雅的解决方案可以自动删除dsl插件刚刚删除的jenkins作业的过时工作区。我的解决方案是添加另一个作业,该作业运行Groovy系统脚本,清除不再存在或已被禁用的作业的所有工作区,并
我想知道是否有更优雅的解决方案可以自动删除dsl插件刚刚删除的jenkins作业的过时工作区。我的解决方案是添加另一个作业,该作业运行Groovy系统脚本,清除不再存在或已被禁用的作业的所有工作区,并在DLS作业后触发
这确实假设您不使用自定义工作区。在DSL代码中与一起使用如何?这基本上是相同的解决方案,因为我必须手动比较工作区和作业。与DSL代码一起运行还有另一个缺点,因为在执行DSL脚本后会删除过时的作业。。。因此,我不会检测到它们被删除。例如,我正在考虑将
DescriptorImpl.getGeneratedJobMap()
与我的分支列表进行比较,尽管直接访问已删除作业的列表要酷得多。Thx!然而,我开始使用Jenkins文件夹插件为一个分支的所有作业创建一个文件夹。很好的副作用:删除文件夹会自动删除磁盘上相应的作业和工作空间。
import hudson.FilePath
import jenkins.model.Jenkins
import hudson.model.Job
def deleteUnusedWorkspace(FilePath root, String path) {
root.list().sort{child->child.name}.each { child ->
String fullName = path + child.name
def item = Jenkins.instance.getItemByFullName(fullName);
if (item.class.canonicalName == 'com.cloudbees.hudson.plugins.folder.Folder') {
deleteUnusedWorkspace(root.child(child.name), "$fullName/")
} else if (item == null) {
println "Deleting (no such job): '$fullName'"
child.deleteRecursive()
} else if (item instanceof Job && !item.isBuildable()) {
println "Deleting (job disabled): '$fullName'"
child.deleteRecursive()
} else {
println "Leaving: '$fullName'"
}
}
}
for (node in Jenkins.instance.nodes) {
println "Processing $node.displayName"
def workspaceRoot = node.rootPath.child("workspace");
deleteUnusedWorkspace(workspaceRoot, "")
}