2

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

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

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

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

+1

Возможно, глупая идея, но ... не можете ли вы очистить эту папку в конце задания, чтобы избавиться от всего, кроме файлов, которые вы хотите кэшировать? – tmt

ответ

0

Так на основе cascaval'scomment, я смог найти решение.

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

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

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

+0

Я бы предложил использовать 'find *', чтобы исключить каталог '.git'. Кроме того, вы, вероятно, захотите также включить «тестовые классы». –