Gitlab CI кэширует файлы определенного типа

Я пытаюсь использовать кеширование в gitlab runner, который создает проект Maven Java. В настоящее время Gitlab runner позволяет кэшировать только определенные пути, определенные в файле gitlab yaml в предложении cache:. Когда maven создает проекты, он генерирует все внутри папки target/, которые являются неотслеживаемыми файлами в git. Поэтому я могу просто использовать опцию untracked: true для кэширования всего в папке target/. Цель кэширования — пропустить компиляцию файлов, которые уже были скомпилированы maven в папке target/.

Однако объем этого кеша составляет около 6 ГБ, что совершенно неразумно с учетом его размера и времени, необходимого для создания и восстановления такого гигантского кеша. Он кэширует все артефакты jar и war, созданные во время компиляции многомодульного проекта maven. Однако maven нужны только файлы .class для проверки изменений для повторной компиляции.

Итак, если бы у них был какой-то способ, с помощью которого я могу кэшировать только файлы *.class и сделать их доступными в последующих сборках, тогда maven мог бы проверить файлы .class и пропустить повторную компиляцию неизмененных файлов, а размер кеша также был бы довольно мал. В настоящее время gitlab-runner позволяет указывать только абсолютные пути для кэширования. Он не поддерживает шаблоны регулярных выражений для таких путей, как \.class$ (что было бы очень полезно).

Есть ли способ кэшировать только определенные типы файлов, используя настройки yaml gitlab runner?


person Rajeshwar Agrawal    schedule 23.06.2016    source источник
comment
Может быть, глупая идея, но... не могли бы вы сделать очистку этой папки в конце задания, чтобы избавиться от всего, кроме файлов, которые вы хотите кэшировать?   -  person tmt    schedule 23.06.2016


Ответы (1)


Итак, на основе cascaval comment, мне удалось найти решение.

В конце сборки maven я выполнил команду для очистки всех артефактов сборки, созданных maven, которые не используются для проверки устаревшего статуса ресурсов .java. Вот что я написал -

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

Это сохраняет все файлы .class в папке target/classes, включая структуру папок, а также файлы в папке maven-status, которые, вероятно, используются maven для проверки состояния файла для перекомпиляции.

person Rajeshwar Agrawal    schedule 24.06.2016
comment
Я бы предложил использовать find * для исключения каталога .git. Кроме того, вы, вероятно, также захотите включить test-classes. - person Mirko Friedenhagen; 25.06.2016