Каждый раз, когда я выполняю команду docker run ./gradlew, она загружает все файлы Gradle и зависимости. Как скачать и установить только один раз? - PullRequest
1 голос
/ 05 августа 2020

У меня есть простой файл докеров, настроенный для создания android приложений. Все работает нормально, но проблема в том, что каждый раз, когда я запускаю команду ./gradlew, она загружает и устанавливает все артефакты и зависимости Gradle. Как я могу просто установить один раз?

это файл докеров:

FROM openjdk:8

ENV SDK_URL="https://dl.google.com/android/repository/sdk-tools-linux-3859397.zip" \
    ANDROID_HOME="/usr/local/android-sdk" \
    ANDROID_VERSION=26 \
    ANDROID_BUILD_TOOLS_VERSION=26.0.2

# Download Android SDK
RUN mkdir "$ANDROID_HOME" .android \
    && cd "$ANDROID_HOME" \
    && curl -o sdk.zip $SDK_URL \
    && unzip sdk.zip \
    && rm sdk.zip \
    && yes | $ANDROID_HOME/tools/bin/sdkmanager --licenses

# Install Android Build Tool and Libraries
RUN $ANDROID_HOME/tools/bin/sdkmanager --update
RUN $ANDROID_HOME/tools/bin/sdkmanager "build-tools;${ANDROID_BUILD_TOOLS_VERSION}" \
    "platforms;android-${ANDROID_VERSION}" \
    "platform-tools"

RUN mkdir /application
WORKDIR /application

и это команда:

docker run -it --rm -v "$PWD":/application packsdkandroiddocker.image bash  ./gradlew assembleRelease --debug

Ответы [ 2 ]

1 голос
/ 05 августа 2020

На основе вашего Dockerfile каталог кеша вашего gradle - /root/.gradle. Итак, вам необходимо смонтировать том в каталог кеша для сохранения кеша.

  • Использовать тома хоста
docker run -it --rm -v $PWD/.gradle:/root/.gradle -v $PWD:/application packsdkandroiddocker.image bash ./gradlew assembleDebug
  • Использовать именованные тома
docker volume create gradle-cache
docker run -it --rm -v gradle-cache:/root/.gradle -v $PWD:/application packsdkandroiddocker.image bash ./gradlew assembleDebug
0 голосов
/ 05 августа 2020

Проблема, как вы, несомненно, обнаружили, в том, что перечисление всех возможных зависимостей всех задач Gradle и их загрузка ... нетривиально.

Это не самое элегантное решение, но я Ранее я решил эту проблему (в контексте бегунов GitLab CI Docker), установив каталог на хосте как каталог GRADLE_USER_HOME. Таким образом, само изображение свободно sh при каждом запуске, но кеши разделяются между запусками. Это означает, что у вас по-прежнему будет начальный медленный запуск на каждом хосте, но это значительно сокращает время, необходимое для последующих запусков.

В зависимости от того, что именно вы пытаетесь сделать, это может или не может быть удовлетворительное решение.

...