У меня есть около 30+ сборочных заданий, которые выполняются на Jenkins в док-контейнере.Каждое из этих заданий выполняет сборку проектов Android в чистом контейнере Docker.Контейнер Docker воссоздается каждый раз, поэтому между выполнением задания ничего не сохраняется.
Я изучаю способы улучшения времени сборки.Из моего исследования я обнаружил, что могу использовать два механизма кэширования, которые поддерживаются Android.
1) Кэш Gradle Build: https://docs.gradle.org/current/userguide/build_cache.html
2) Кэш Android Build: https://developer.android.com/studio/build/build-cache
Насколько я понимаю, кэш сборки Gradle позволит мне кэшировать связанные с gradle артефакты (такие как встроенные классы и ресурсы), а кэш сборки Android позволит мне кэшировать связанные с Android артефакты (такие как библиотеки AAR)., недексированные файлы dex и т. д.).
Оба эти механизма кэширования довольно легко добавить в мой проект.Однако одна проблема, с которой я сталкиваюсь, заключается в том, что, поскольку мои контейнеры-докеры воссоздаются каждый раз, я теряю способность фактически сохранять кеш, поскольку он будет освобожден в конце сеанса.
Одна идея, которую яЧтобы решить эту проблему, нужно было смонтировать том на хост-компьютере в докер-контейнер, чтобы оба кэша записывали в эту вновь смонтированную область.Это работает по большей части, однако я столкнулся со странным поведением и случайными сбоями gradle.Я исследовал это и узнал, что кеш-память не поддерживается для совместного использования в док-контейнере.
https://github.com/gradle/gradle/issues/851
Я нахожусь в процессе исследования возможности использования Android Build Cacheбыть разделенным между контейнерами Docker, но я предполагаю, что есть аналогичная проблема с общим доступом.
Мне интересно, как другие решили эту проблему.
Спасибо!