Gitlab CI缓存特定文件类型

时间:2016-06-23 04:34:29

标签: maven continuous-integration gitlab gitlab-ci gitlab-ci-runner

我正在尝试在gitlab runner中使用缓存,它构建了一个Maven Java项目。目前,Gitlab运行器仅允许在cache:子句中的gitlab yaml文件中定义缓存特定路径。当maven构建项目时,它会生成target/文件夹中的所有内容,这些文件是git中未跟踪的文件。所以我可以简单地使用untracked: true选项来缓存target/文件夹下的所有内容。缓存的目的是跳过编译已由maven在target/文件夹下编译的文件。

然而,这个缓存大约为6GB,这对于创建和恢复这样一个巨型缓存所需的大小和时间来说是完全不合理的。它缓存在编译多模块maven项目期间构建的所有jar和war工件。但是,maven只需要.class文件来检查重新编译的更改

因此,如果他们使用某些方式我只能缓存*.class文件,并使它们在后续版本中可用,那么maven可以检查.class文件并跳过重新编译未更改的文件,缓存大小也会很小。目前gitlab-runner只允许指定缓存的绝对路径。它不支持\.class$等路径的正则表达式模式(这本来非常有用)。

有什么办法可以使用gitlab runner yaml设置只缓存特定的文件类型吗?

1 个答案:

答案 0 :(得分:0)

因此基于cascaval's comment,我找到了解决方案。

在maven构建结束时,我运行了一个命令来清理maven创建的所有构建工件,这些工件不用于检查.java资源的陈旧状态。这是我写的 -

cd ./projects/directory
find . | grep --perl-regexp --regexp='\/target\/(?!classes|maven)' | xargs rm --recursive --force

这会保存target / classes文件夹中的所有.class文件,包括文件夹结构以及maven-status文件夹中的文件,maven可能会使用这些文件检查文件状态以进行重新编译。