竹子构建目录占用过多空间,是否可以通过cron job进行清理?

12
我们使用Bamboo CI。有多个本地代理和许多计划的并行构建。build-dir在bamboo-home中是数百千兆字节,并且分析显示,随着添加新功能分支,它会不断增长。计划似乎在每个本地代理目录中都有副本,也直接存在于build-dir中。
与过期的工件不同,Bamboo似乎不能自动清理此内容。例如,如果一个本地代理被移除,则本地代理生成的目录将永远存在,占用大量空间。
可以设置计划在构建结束时进行清理,但这会影响需要对构建进行事后分析的情况。
由于目录的空间不足,我刚刚添加了一个每天的cron任务,以定期删除超过21天没有访问的文件和目录。当我手动运行它时,我从600GB分区中回收了300GB。我想知道其他人是否遇到了同样的问题,如果长期外部清理build-dir是否安全。这会影响Bamboo构建吗?我错过了一些Bamboo选项可以为我完成这个操作吗?
在Atlassian网站上搜索没有帮助,没有得到答案...其他人是如何控制这个占用空间的程序?

我有类似的设置,并且删除了所有超过一个月的构件,从而释放了大量空间。我编写了一个脚本,每个月末运行一次。我不认为有人使用超过一周的数据。 - binarymemoir
我并不是很担心构件,它们确实占用了很多空间,但基于计划配置和它们是否在过去的3个部署中到达任何环境,竹子本身会清理它们。我的问题更多地涉及bamboo_home/xml-data/build-dir树中所消耗的空间。 - shonky linux user
如果在EC2上运行竹子,只要构建工作目录和Bamboo主目录存储在EBS上并在重启之间保留,就可以将其安全地放置在临时数据存储上。 - shonky linux user
3个回答

20

这个cron job已经运行一段时间了,没有出现任何问题,它可以控制空间使用。

我将参数减少到15天。

我的crontab看起来像这样:

# clean up old files from working directory
0 20 * * * find /<path_to>/bamboo-home/xml-data/build-dir/ -depth -not -path *repositories-cache* -atime +15 -delete

# clean up old backups every Sunday
0 21 * * 0 find /<path_to>/bamboo-home/backups -type f -mtime +28 -delete

# remove any old logs from install directory after 15 days
0 22 * * * find /<path_to>/bamboo/logs/ -type f -mtime +15 -delete

# quick and dirty truncate catalina.out to stop it growing too large (or better still use logrotate) 
0 23 * * * cat /dev/null > /<path_to>/bamboo/logs/catalina.out

我希望这对试图控制竹子硬盘空间使用的其他人有用。 第一项工作是最重要的,后面三项只是日常维护。

N.B.由于我公司外包的Linux环境存在独特的情况,因此catalina.out不使用logrotate。如果可能的话,我通常建议使用logrotate而不是我的快速而粗略的截断方法 - 参见Jon V的答案。


这个处理 xml-data/build-dir/ 没问题,但是旁边的 builds/ 目录怎么办?我刚发现,我们的 builds/ 目录里有 78Gb 的数据 -- 加上 build-dir/ 里的 118Gb。它们可以用同样的方式清理吗 -- 删除一定时间之前的所有内容?(顺便说一句,在 build-dir/ 下搜索,我找不到任何与 *repositories-cache* 匹配的内容。) - Mikhail T.
构建中没有存储库缓存,构建中的内容可以安全删除,而不会影响Bamboo。 - ArMonk

3
虽然 cron 的想法很好,但我过去在 Bamboo 中也做过“每次构建后清除工作目录”的选项。基本上,对于任何给定的作业,都有一个配置选项,它将清理适当的 build-dir/<build_plan_job> 目录,以针对一个给定的计划/作业:
操作 -> 配置计划 -> 点击作业 -> 杂项选项卡 -> 第一个复选框
虽然这确保了未来的构建临时区域被清理干净,但它并不能帮助已经存在和/或旧版的构建程序。考虑到正常的 git 工作流程,您可能会有很多分支(每个分支都会创建一个特定的作业 ID(如 PLAN-JOB_WITH_BRANCH_NUMBER-BUILD_NUMBER 或类似)),这些构建程序很快就变得老旧/庞大。我刚刚进行了一次快速检查,现在我们正在清理大部分构建区域(至少是大型区域),但仍然有超过 100Gig 的构建垃圾来自很久以前合并的分支。
谢谢提供 cron 示例,那应该可以为未来工作。
无关的信息:我越用 Bamboo 越爱恨交加。
编辑:作为一般性的评论,我会尽力与 SA 合作,为 catalina.out 设置/实施 logrotate 规则集 - 用 /dev/null 覆盖似乎是一个非常糟糕的想法,除非您已经使用类似 ELK 或 Splunk 的东西将其吞噬。我的 /etc/logrotate.d/bamboo_catalina_out 看起来像(使用您的路径):
/<path_to>/bamboo/logs/catalina.out {
  create 0660 bamboo bamboo
  compress
  copytruncate
  missingok
  rotate 10
  size 100M
}

最后,你为什么同时拥有第三和第四个cron脚本呢?

是的,我同意...在这里进行外包安排会使根管理员请求变得昂贵,因此我采取了快速而简单的截断方式。Bamboo中的“构建后清理工作目录”选项可以在一定程度上进行清理,但如果作业失败,则会使故障排除/事后分析更加困难。因此,我将其取消选择,并在源代码检出时“强制进行干净的构建”。这样可以在后续作业开始之前清理目录。稍后的cron会获取所有旧的合并功能分支并将它们清理掉。 - shonky linux user
2
是的 - 这不是理想的情况 - 而且你仍然会有很多未被清理的目录浮动(我们的一些构建已经创建了900多个分支 - 鉴于该构建有4个运行作业,这就是3600多个过时构建的目录)。如果它有一个“仅在构建成功后清理”的选项,并且有一个“此分支已在源中删除,因此删除与其关联的所有构建目录”的复选框,我认为那将是一个好的解决方案。 - Jon V

0

您可以按照以下步骤操作:

  1. 使用管理员帐户登录
  2. 进入“管理”(位于右上角的齿轮图标)
  3. 从左侧菜单中选择“到期”
  4. 单击“编辑”并配置(如果尚未配置)全局到期设置,并设置执行计划
  5. 单击保存

如果要立即执行,请单击“立即运行”按钮


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接