Почему сборка gradlew не использует локальный кеш в докере (bitbucket)? - PullRequest
0 голосов
/ 22 мая 2019

Я использую док-конвейер bitbucket для проверки своих сборок для приложения Android на push. Одна из моих зависимостей - это закрытый пакет, который я размещаю в другом хранилище битбакетов. Для сборок на пользовательском компьютере я использую плагин частного хранилища Maven от Gradle, который может разрешить мою зависимость с помощью зашифрованного имени пользователя и пароля.

Это хорошо работает для машин разработчиков, но я хочу избежать жесткого кодирования имен пользователей и паролей в конвейере. Вместо этого, поскольку bitbucket поддерживает sshkeys в репозиториях для аутентификации, я встроил свой конвейерный сценарий, чтобы клонировать репозиторий с моими личными пакетами и скопировать их в кеш-память. Я пробовал оба:

/ дома / Gradle / .gradle / кэша / модули-2 / файлы-2,1 / com.mycompany

~ / .gradle / кэша / модули-2 / файлы-2,1 / com.mycompany

в качестве кешей. Клонирование и копирование работают отлично, так как я могу видеть файлы в их соответствующих каталогах в кеше, добавляя ls в конвейер, но gradlew все еще пытается перейти в Интернет (другой репозиторий bitbucket) для разрешения зависимостей, как если нет кеша. Кроме того, я использую Gradle Docker image gradle: 3.4.1 (версия gradle в моем файле build.gradle уровня проекта), но сборка gradle завершается неудачно с помощью google () - это не функция.

Сборка Gradlew не удается разрешить мой файл package.pom из-за отсутствия имени пользователя (поскольку в конвейере нет gradle.properties). Но почему он не использует кеш, вместо того, чтобы пытаться перейти в хранилище?

Я пробовал стандартный образ докера java: 8, образ док-станции gradle до 5.1.1, и я пытался копировать файлы пакета в различные кэши gradle-образа в образе докера. Я также пытался изменить разрешения с помощью chmod 775, но безрезультатно. Я также попробовал gradlew buildDebug с теми же результатами, что и gradlew build. Я немного новичок в gradle, docker и bitbucket, поэтому я не уверен, что является причиной проблемы.

  image: gradle:3.4.1

  pipelines:
  default:
    - step:
        caches:
          - gradle
          - android-sdk

        script:        
          # Download and unzip android sdk
          - wget --quiet --output-document=android-sdk.zip https://dl.google.com/android/repository/sdk-tools-linux-3859397.zip
          - unzip -o -qq android-sdk.zip -d android-sdk

          # Define Android Home and add PATHs
          - export ANDROID_HOME="/opt/atlassian/pipelines/agent/build/android-sdk"
          - export PATH="$ANDROID_HOME/tools:$ANDROID_HOME/tools/bin:$ANDROID_HOME/platform-tools:$PATH"

          # Download packages.
          - yes | sdkmanager "platform-tools"
          - yes | sdkmanager "platforms;android-27"
          - yes | sdkmanager "build-tools;27.0.3"
          - yes | sdkmanager "extras;android;m2repository"
          - yes | sdkmanager "extras;google;m2repository"
          - yes | sdkmanager "extras;google;instantapps"
          - yes | sdkmanager --licenses

          # Build apk
          - git clone git@bitbucket.org:myorg/myrepo.git
          - scp -r myrepo/com/mycomp/* /home/gradle/.gradle/caches/modules-2/files-2.1/com.mycomp
          #- gradle build
          - ./gradlew build 
          #- ./gradlew assembleDebug

definitions:
    caches:
      android-sdk: android-sdk

Ошибка сборки Gradlew:

> Could not resolve all files for configuration ':app:debugCompileClasspath'.
   > Could not resolve com.mycomp:mypackage:1.0.1.
     Required by:
         project :app
      > Could not resolve com.mycomp:mypackage:1.0.1.
         > Could not get resource 'https://bitbucket.org/myorg/myrepo/raw/releases/com/mycomp/mypackage/1.0.11/package-1.0.1.pom'.
            > Username may not be null
...