如何自动清理主版上用于管道构建的工作区文件夹“ ... @ script”和“ ... @ libs”?

时间:2019-07-01 14:51:45

标签: jenkins jenkins-pipeline

运行Jenkins管道时,某些存储库在主数据库上检出到工作空间文件夹中,即包含Jenkinsfile的项目以及共享库的存储库。它们存储在以项目命名的文件夹中,但后缀分别为@script。 @libs。

完成此操作后,Jenkinsfile会被解释并在代理上完成所有工作(包括克隆更多存储库等)。

虽然在构建结束时很容易在代理上进行清理,但这不会从主数据库中删除文件。这样,随着时间的推移,我们已经组装了数百GB的数据。

此清理可能无法作为Jenkins构建(在Jenkinsfile中配置)的一部分进行,因为deleteDir()只能从代理的工作空间中删除。也许可以通过在脚本块中使用java.util.File方法来工作(Groovy代码在master上执行),但是只要构建正在运行,Jenkinsfile和管道库仍然可能被锁定。

所以我想知道是否还有其他方法可以进行主清理。任何插件或脚本?还有其他想法吗?

1 个答案:

答案 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文件夹,因为詹金斯可能会需要它。