Среда Android с использованием докеров и битбакетных трубопроводов
Я очень плохо знаком с Bitbucket-конвейерами (бета-версиями) и докером. Нет предыдущего опыта интеграции CI
Я следил за этим вопросом, но нет четкого описания для начинающих
Я пытаюсь настроить непрерывную интеграцию (CI) в конвейерах Bitbucket для проекта Android с помощью контейнера Docker
Я хочу использовать мой предыдущий проект Android с этим контейнером
Шаги, за которыми я следовал
Шаг 1 Установленные инструменты Docker Software. Успешно установлен.
Шаг 2 Создана виртуальная машина успешно
Шаг 3 Создан контейнер из Kitematic (Beta) Uber/Android-Build-Environment
![Successfully Docker full]()
Шаг 4 Успешно построить проект
$ eval "$(docker-machine env default)"
$ docker build -t uber/android-build-environment .
![enter image description here]()
Шаг 5 Изменить работу непосредственно на Android-проект
Шаг 6. Проблема в этом шаге во время выполнения этой команды
docker run -i -v $PWD:/project -t uber/android-build-environment /bin/bash /project/ci/build.sh
Ошибка пришла:
/bin/bash: /project/ci/build.sh: No such file or directory
![Error Image]()
Детали докера
docker-machine ls
NAME ACTIVE DRIVER STATE URL SWARM DOCKER ERRORS
default - virtualbox Running tcp://192.168.99.100:2376 v1.12.1
Докер Сервис
docker service ls
Docker Machine ENV
export DOCKER_TLS_VERIFY="1"
export DOCKER_HOST="tcp://192.168.XX.XXX:XXXX"
export DOCKER_CERT_PATH="/Users/gaurav/.docker/machine/machines/default"
export DOCKER_MACHINE_NAME="default"
# Run this command to configure your shell:
# eval $(docker-machine env)
Ответы
Ответ 1
Если я правильно понимаю ваш вопрос: вам технически даже не нужно устанавливать Docker на свой локальный компьютер, чтобы использовать его в ваших потоках Bitbucket (хотя это может быть весьма полезно для отладки).
Контейнеры Bitbucket могут быть настроены на использование Docker из Docker Hub и тот, который вы упомянули (uber/android-build-environment) работал хорошо для меня.
Просто добавьте bitbucket-pipelines.yml
в корень вашего проекта, например:
image: uber/android-build-environment:latest
pipelines:
default:
- step:
script:
- build.sh
Мне нравится организовывать свой процесс сборки в своем собственном файле ash script (build.sh
), но это необязательно (вместо этого вы можете поместить несколько маркированных команд в yaml в соответствии с директивой script
). Примеры (и более подробные сведения о) файла bitbucket-pipelines.yml
можно найти на странице Языковые руководства для страниц Bitbucket Pipelines.
My build.sh
script (также в корне проекта, но может быть помещен в подкаталог, если вы ссылаетесь на него как таковое на bitbucket-pipelines.yml
, например scripts/build.sh
):
#!/bin/sh
mkdir "${ANDROID_HOME}/licenses" || true
echo "8933bad161af4178b1185d1a37fbf41ea5269c55" > "${ANDROID_HOME}/licenses/android-sdk-license"
./gradlew assembleDebug
Часть лицензий позволяет процессу Android Gradle автоматически загружать Android-зависимости для вас, как указано в этом .
Для хорошей меры установите разрешения для сборки script соответственно:
git update-index --chmod=+x build.sh
Убедитесь, что вы включили Bitbucket Pipelines (со страницы вашего репо: Settings
→ Pipelines: Settings
→ Enable Pipelines
).
Затем просто скопируйте bitbucket-pipelines.yml
и build.sh
и нажмите на репозиторий BitBucket. Построение потока Bitbucket для вашего проекта должно начаться вскоре после вашего нажатия. Bitbucket Pipelines загрузит Docker uber/android-build-environment
из Docker Hub и проверит ваш проект и запустит build.sh
script в Docker.
Процесс, который вы описывали настройкой Docker на вашем локальном компьютере, может быть действительно полезен, если ваши сборки Bitbucket Pipelines не работают, и вы хотите, чтобы на вашем локальном компьютере работала одна и та же среда, чтобы вы могли экспериментировать с ней и тестировать изменения на build.sh
script, прежде чем на самом деле совершить и нажать на свое репо.
Может оказаться полезным, если вы запустили (локально):
docker run -it uber/android-build-environment
Что запустит Docker (на вашем локальном компьютере) и поместит вас в интерактивную оболочку, чтобы вы могли просматривать и лучше понимать среду Docker.
Также обратите внимание, что Bitbucket Pipelines клонирует ваше репо в Docker как часть процесса сборки (насколько я мог сказать), которое вы не сделали на Docker, запущенном на вашей локальной машине, что, возможно, привело к некоторым из ваше замешательство в отношении вашего build.sh
script не присутствует.
Если вы хотите, чтобы каталог на вашем локальном компьютере существовал в Докере (который вы используете на своем локальном компьютере, возможно, для тестирования проекта на локальном компьютере в докере, который вы хотите использовать), вы можете использовать следующие чтобы установить текущий рабочий каталог на /project
внутри локально запущенного Docker:
docker run -v `pwd`:/project -it uber/android-build-environment
Более подробную информацию можно найти на Установить каталог хоста в качестве тома данных.
Как отметил @ming-c в своем ответе , есть много других изображений Docker, доступных на Docker Hub; безусловно, стоит посмотреть, сможете ли вы найти изображение, наиболее подходящее для ваших нужд.
Ответ 2
Uber образ создан для их среды CI, я создал типичный образ докера, включающий в себя Android build env. В него вошли последние SDK и NDK. Вы можете просто использовать следующий пример в качестве своего bitbucket-pipelines.yml
image: mingc/android-build-box:latest
pipelines:
default:
- step:
caches:
- gradle
script:
- chmod +x gradlew
- ./gradlew assemble
Он включает в себя следующие компоненты:
- Ubuntu 17.10
- Android SDK 16 17 18 19 20 21 22 23 24 25 26 27 28
- Инструменты сборки Android 17.0.0 18.1.1 19.1.0 20.0.0 21.1.2 22.0.1 23.0.1 23.0.2 23.0.3 24.0.0 24.0.1 24.0.2 24.0.3 25.0.0 25.0.1 25.0. 2 25.0.3 26.0.0 26.0.1 26.0.2 27.0.1 27.0.2 27.0.3 28.0.1 28.0.2 28.0.3
- Android NDK r18b
- экстра-андроид-m2repository
- экстра-Google-m2repository
- экстра-Google-google_play_services
- Google API дополнения
- Эмулятор Android
- Схема ограничения
- TestNG
- Python 2, Python 3
- Node.js, npm, React Native
- Ruby, RubyGems
- Fastlane
- Котлин 1,3
Вы также можете использовать этот образ докера для создания своего проекта Android с помощью одной команды запуска докера:
cd <android project directory> # change working directory to your project root directory.
docker run --rm -v 'pwd':/project mingc/android-build-box bash -c 'cd /project; ./gradlew build'
Ответ 3
Ваша команда docker run -i -v $PWD:/project -t uber/android-build-environment /bin/bash /project/ci/build.sh
предполагает, что файл /project/ci/build.sh
находится в контейнере. Вы уверены, что используете эту команду docker из каталога, который ее содержит?
Если вы не уверены, что я попробую (из каталога вашего проекта)
docker run -it -v $PWD:/project uber/android-build-environment /bin/bash
а затем проверьте результаты ls -a /project
, когда вы вошли в контейнер.
Еще одна вещь, о которой нужно убедиться, заключается в том, что build.sh
разрешено выполнять, убедитесь в этом, выполнив chmod +x build.sh
на нем.
Ответ 4
Вы можете использовать это руководство:
https://github.com/danylovolokh/Setup-Free-Bitbucket-Cloud-CI
Это довольно исчерпывающий, он показывает, как:
- Обновите номер сборки, название версии сборки и т. Д...
- Обновление build.gradle
- Зафиксируйте и отправьте изменения в хранилище
- Собрать список изменений
- Создайте приложение
Дополнительные шаги:
- Подпишите приложение с помощью ключа "релиз".
- Загрузите файлы apk в хранилище для дальнейшего использования.
- Загрузите версию в Fabric Beta для тестирования.