Android CI с использованием Bitbucket Pipelines и Docker

Я пытаюсь настроить непрерывную интеграцию (CI) в конвейерах Bitbucket для Android.

Я создал образец пустого действия с помощью Android Studio 2.1.1.

В Pipelines я использую контейнер Docker https://hub.docker.com/r/uber/android-build-environment/, который прекрасно создает среду. Вот мой bitbucket-pipelines.yml

image: uber/android-build-environment:latest

pipelines:
  default:
    - step:
        script:
          - echo y | android update sdk --filter "extra-android-m2repository" --no-ui -a # Grab the Android Support Repo which isn't included in the container
          - ./gradlew assembleDebug

Некоторые изменения необходимы, поскольку ожидается запуск https://hub.docker.com/r/uber/android-build-environment/ следующим образом:

docker run -i -v $PWD:/project -t uber/android-build-environment /bin/bash /project/ci/build.sh

Например, источник не копируется на том /project но вместо этого Pipelines копирует содержимое репозитория Bitbucket в рабочий каталог контейнера по адресу:

/opt/atlassian/bitbucketci/agent/build

И когда ./gradlew assembleDebug при запуске я получаю следующую ошибку:

...

FAILURE: Build failed with an exception.

* What went wrong:
Could not create service of type TaskArtifactStateCacheAccess using TaskExecutionServices.createCacheAccess().
> Failed to create parent directory '/opt/atlassian/bitbucketci/agent/build/.gradle' when creating directory '/opt/atlassian/bitbucketci/agent/build/.gradle/2.10/taskArtifacts'

* Try:
Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output.

BUILD FAILED

Total time: 56.449 secs

Бег ls -al в рабочем каталоге выдает:

ls -al
total 52
drwxr-xr-x 5 root root 4096 May 31 22:33 .
drwxr-xr-x 3 root root 4096 May 31 22:43 ..
drwxr-xr-x 3 root root 4096 May 31 22:33 app
-rw-r--r-- 1 root root  462 May 31 22:33 bitbucket-pipelines.yml
-rw-r--r-- 1 root root  498 May 31 22:33 build.gradle
drwxr-xr-x 8 root root 4096 May 31 22:33 .git
-rw-r--r-- 1 root root  387 May 31 22:33 .gitignore
drwxr-xr-x 3 root root 4096 May 31 22:33 gradle
-rw-r--r-- 1 root root  855 May 31 22:33 gradle.properties
-rwxr-xr-x 1 root root 4971 May 31 22:33 gradlew
-rw-r--r-- 1 root root 2314 May 31 22:33 gradlew.bat
-rw-r--r-- 1 root root   15 May 31 22:33 settings.gradle

3 ответа

Решение

Это ошибка в их системе, я сообщаю об этом ( проблема url, она довольно длинная) им, и они исправили ее ( fix url). Я проверил мой проект, и он успешно собран. Попробуйте построить свой проект сейчас и удачи,

Это выглядит как uber/android-build-environment больше не поддерживается.

Я в конечном итоге с помощью javiersantos/android-ci вместо этого, который работает отлично с нуля.

Просто добавьте следующее содержимое в bitbucket-pipeline.yml:

image: javiersantos/android-ci:27.0.3

pipelines:
  default:
    - step:
        script:
          - export GRADLE_USER_HOME=`pwd`/.gradle
          - chmod +x ./gradlew
          - ./gradlew assembleDebug

Не могли бы вы символическую ссылку вашего проекта из /opt/atlassian/bitbucketci/agent/build в /project изнутри контейнера? ln -s /opt/atlassian/bitbucketci/agent/build /project это команда, которая вам понадобится

или альтернативно скопировать файлы по новому пути?

У меня нет опыта разработки под Android, так что YMMV:)

Другие вопросы по тегам