运行Jenkins管道时,某些存储库在主数据库上检出到工作空间文件夹中,即包含Jenkinsfile的项目以及共享库的存储库。它们存储在以项目命名的文件夹中,但后缀分别为@script。 @libs。
完成此操作后,Jenkinsfile会被解释并在代理上完成所有工作(包括克隆更多存储库等)。
虽然在构建结束时很容易在代理上进行清理,但这不会从主数据库中删除文件。这样,随着时间的推移,我们已经组装了数百GB的数据。
此清理可能无法作为Jenkins构建(在Jenkinsfile中配置)的一部分进行,因为deleteDir()只能从代理的工作空间中删除。也许可以通过在脚本块中使用java.util.File方法来工作(Groovy代码在master上执行),但是只要构建正在运行,Jenkinsfile和管道库仍然可能被锁定。
所以我想知道是否还有其他方法可以进行主清理。任何插件或脚本?还有其他想法吗?
答案 0 :(得分:0)
我一定很想念东西,但与此同时也遇到了问题。花了一个上午的搜索时间,但找不到答案。
我的用例是我拥有共享库,该库具有可通过参数配置的完整管道。这个管道在很多buildjobs之间共享。 (超过50岁)。 管道使用泊坞窗代理。通过这样设置,我在jenkins / scripts / etc中得到了一个非常干净的设置。 唯一的问题是,它为我留下了母版@libs文件夹中每个buildjob的docker映像的缓存副本。这是大师级无所事事的千兆字节存储量(除了将我的下一个构建作业加快几毫秒之外)。
最后,我创建了一个单独的buildjob,仅删除了主数据库上的所有这些@libs文件夹。
这只是一个简单的shell脚本工作
#!/bin/bash
# This needs to be run occasionally. Can be run after every build.
# When using jenkins shared libraries with a pipeline with docker agent,
# each job gets a local cached copy of the docker image.
# which is about 1.4. Gb per job.
# Which is a bit steep if you have dozens of jobs out there.
echo "Removing all temp docker images"
rm -fr ${WORKSPACE}/../*@libs/
ls -al ${WORKSPACE}/../
我将其设置为在晚上运行。 似乎并没有影响我的构建,但是我不确定您是否也可以使用它来摆脱@tmp文件夹,因为詹金斯可能会需要它。