Docker и Gradle не будут использовать кэш зависимостей

#docker #gradle

Вопрос:

Я пытался создать контейнер Docker, который будет запускать мой конвейер Android CI (по крайней мере, большую его часть) на действиях Github, проблема в том, что у моей компании есть несколько частных зависимостей.

Поэтому я создал образ докера, который выполняет действия онлайн при подключении к сети моей компании, и все работает нормально. Затем я фиксирую этот образ Docker, создаю новый тег и загружаю его в реестр… однако всякий раз, когда я нахожусь на другом компьютере и пытаюсь запустить Gradle в автономном режиме, это просто не сработает… Даже несмотря на то, что у него есть кэшированные зависимости.

Есть ли какой — нибудь другой способ достичь того, что я здесь пытаюсь? Я не думаю, что тома работают с действиями Github

Ответ №1:

Вы могли бы подумать о том, чтобы загрузить свои зависимости один раз, а затем скопировать каталог, в котором они хранятся ($GRADLE_USER_HOME/.gradle/кэширует/модули-2), и вызвать этот каталог в своей автономной настройке.

Для этого перед/одновременно с выполнением команды Gradle (автономно) просто установите переменную GRADLE_RO_DEP_CACHE в качестве точки кэша зависимостей, доступной только для чтения, для этого каталога. Для получения дополнительной информации, пожалуйста, ознакомьтесь с документацией Gradle по адресу:

https://docs.gradle.org/current/userguide/dependency_resolution.html#sub:shared-readonly-cache

Комментарии:

1. Спасибо за это, бывает, что у меня была конфигурация, не позволяющая gradle сохранять файлы .jar после запуска сборки… Во всем моя вина

Ответ №2:

Случается, что у меня была конфигурация, не позволяющая Gradle хранить свои зависимости.

 buildCache {
    local {
        enabled = false
    }
}
 

После включения этого и повторного запуска Gradle я смог заставить все работать должным образом. Мои шаги были:

  1. Создание образа Docker с нуля
  2. Выполнение этапов сборки в режиме онлайн и при подключении к сети моей компании
  3. Зафиксируйте это изображение, а затем загрузите его на DockerHub

Я решил зафиксировать образ вместо копирования зависимостей моего хоста в образ, потому что в предыдущих тестированиях у него были некоторые проблемы, связанные с конкретными ОС. Таким образом, это, кажется, работает нормально.