Подтвердить что ты не робот

Среда 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)
4b9b3361

Ответ 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 (со страницы вашего репо: SettingsPipelines: SettingsEnable 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

Это довольно исчерпывающий, он показывает, как:

  1. Обновите номер сборки, название версии сборки и т. Д...
  2. Обновление build.gradle
  3. Зафиксируйте и отправьте изменения в хранилище
  4. Собрать список изменений
  5. Создайте приложение

Дополнительные шаги:

  1. Подпишите приложение с помощью ключа "релиз".
  2. Загрузите файлы apk в хранилище для дальнейшего использования.
  3. Загрузите версию в Fabric Beta для тестирования.