问题 通过GUI删除Jenkins作业不会删除从属工作区中的工作区


我最近从Jenkins删除了2份工作(通过GUI)。当我之后登录奴隶时,我仍然看到那两个工作的工作空间。这种行为是否正常?

笔记:

  • Jenkins master和slave都在Windows环境中运行。
  • Master在Windows Server 2003上运行,从站在Windows Server 2008 R2上运行。
  • 詹金斯版本是1.509.2

问候, Benil


8203
2017-12-12 00:24


起源



答案:


不幸的是: https://groups.google.com/forum/#!topic/jenkinsci-users/SiZ3DL-UJ-8

在从站上找到的工作空间不会被删除,因为这是一个非常重要的问题(这意味着作业需要记录作业从未执行过的每个从站,并且还必须考虑离线的从站,真正彻底解决方案)。


10
2018-02-06 12:38



你击中牛眼。问了伙伴。谢谢。 - Ben
詹金斯对此有一个公开的问题: issues.jenkins-ci.org/browse/JENKINS-2111   - 并在此讨论中发布了工作区清理脚本: groups.google.com/d/msg/jenkinsci-users/SiZ3DL-UJ-8/... - akaihola


答案:


不幸的是: https://groups.google.com/forum/#!topic/jenkinsci-users/SiZ3DL-UJ-8

在从站上找到的工作空间不会被删除,因为这是一个非常重要的问题(这意味着作业需要记录作业从未执行过的每个从站,并且还必须考虑离线的从站,真正彻底解决方案)。


10
2018-02-06 12:38



你击中牛眼。问了伙伴。谢谢。 - Ben
詹金斯对此有一个公开的问题: issues.jenkins-ci.org/browse/JENKINS-2111   - 并在此讨论中发布了工作区清理脚本: groups.google.com/d/msg/jenkinsci-users/SiZ3DL-UJ-8/... - akaihola


我刚刚写了一个脚本,可以定期安排来清理未使用的工作区。它将遍历所有Jenkins从属服务器并检查工作区下的目录是否已在Jenkins主服务器中删除。

https://gist.github.com/ceilfors/1400fd590632db1f51ca


1
2017-08-27 20:38



你的脚本不适合我。它无法找到cloudbees Folder类 - Adam
@Adam CloudBees Folder类可通过安装获得 CloudBees文件夹插件。如果您不想安装插件,可以稍微修改脚本以删除文件夹支持。 - ceilfors
@Adam你可以使这个脚本工作,即使你没有Cloudbees文件夹插件,但如果你开始使用它,如果你改变条件inisFolder(),它可以支持该插件 return item instanceof Folder至 return item.class.canonicalName = 'com.cloudbees.hudson.plugins.folder.Folder'。然后你可以删除 import com.cloudbees.hudson.plugins.folder.Folder,你将不再 要求 插件。 - Jelaby


要完善@oblio说的话

这意味着工作需要记录工作所执行的每个奴隶

构建 作业确实记录了他们运行的哪个奴隶,但是一段时间之后可以(并经常)删除构建。

它还必须考虑离线的奴隶

当然,这通常是由Jenkins核心内置的工作区清理功能处理的,因为它作为后台进程运行,处理当前在线从属(删除很少使用的工作区),所以任何奴隶都是 有时 在线最终将被清理。

问题是,此功能当前忽略了明显的工作空间,这些工作空间与运行时不存在的作业不对应,在保守的一面犯错误。 这是我的承诺 重写了清理线程以修复其他一些问题,但不是这个问题。


0
2017-12-18 13:19





我遇到了一个有效的脚本,它可以很好地清理磁盘空间不足并使从站脱机时的清理: https://gist.github.com/rb2k/8372402


0
2017-09-04 17:51



此脚本不回答原始问题。该脚本只删除从站中找到的所有作业。删除现有作业的工作空间是不好的,因为它会减慢CI,即所有内容都需要重新检出,空间无论如何都会重新增长。 - ceilfors
确实,它不像它可能的外科手术。仍然存在的作业将重新增长,但删除的作业不会。您是否可以更新脚本以检查作业是否仍然有效? - Adam
这就是我的答案中的脚本试图做的事情。此外,您的答案中的脚本将不会删除已删除的作业的工作空间 一切都将重新成长。如果您阅读了该脚本,它会清楚地遍历该脚本 Jenkins.instance.items 这意味着删除的工作将不会被照顾。 - ceilfors
嗯,我没有写剧本,但它对我有效。也许Jenkins.instance.items的工作方式与我们预期的不同? - Adam
我知道它不是你写的,因此我写了“你的答案中的脚本”:) Jenkins.instance.items几乎不可能返回已删除的作业。起初它对我有效,但随着时间的推移它会重新回归。如果它对你有用,那就太棒了! - ceilfors