2

Maven Javaプロジェクトを構築するgitlabランナーでキャッシュを使用しようとしています。現在、Gitlabランナーは、cache:節のgitlab yamlファイルで定義された特定のパスのキャッシュのみを許可します。 mavenがプロジェクトをビルドすると、target/フォルダ内のすべてのものが生成されます。これらはgitでuntrackedファイルです。だから、untracked: trueオプションを使って、target/フォルダのすべてをキャッシュすることができます。キャッシングの目的は、既にmavenによってtarget/フォルダの下にコンパイルされたファイルのコンパイルをスキップすることです。Gitlab CIの特定のファイルタイプをキャッシュする

しかし、このキャッシュの容量は約6GBです。このような巨大なキャッシュを作成して復元するのに必要なサイズと時間はまったく無理です。これは、マルチモジュールプロジェクトのコンパイル中に構築されたすべてのjarファイルとwarアーティファクトをキャッシュします。しかし、mavenは再コンパイルのための変更を確認するために.classファイルのみを必要とします

*.classファイルをキャッシュできる何らかの方法を使用していて、その後のビルドでそれらを利用できるようにするならば、mavenは.classファイル変更されていないファイルやキャッシュサイズを再コンパイルするのをスキップしてもかなり小さくなります。現在のところ、gitlab-runnerはキャッシュの絶対パスを指定することしかできません。 \.class$などのパスの正規表現パターンはサポートされていません(非常に便利でした)。

gitlab runner yaml設定を使用して特定のファイルタイプのみをキャッシュする方法はありますか?

+1

愚かなアイデアかもしれませんが...キャッシュしたいファイル以外のすべてを取り除くために、仕事の終わりにそのフォルダのクリーンアップを行うことはできませんか? – tmt

答えて

0

cascaval'scommentに基づいて、私は解決策を見つけ出すことができました。

mavenビルドの終わりに、私は、.javaリソースの古くなったステータスをチェックするために使用されない、mavenによって作成されたすべてのビルド成果物を消去するコマンドを実行しました。

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

これは、フォルダ構造を含むターゲット/ classesフォルダ内のすべての.classファイルを保存し、また、おそらく再コンパイルするために、ファイルの状態を確認するためにMavenによって使用される、のmaven-ステータスフォルダ内のファイル - ここで私が書いたものです。

+0

'find *'を使って '.git'ディレクトリを除外することをお勧めします。さらに、 'test-classes'も含めたいと思うでしょう。 –