pay - entorno android usando docker y bitbucket pipelines
deploy pipeline (3)
Soy muy nuevo en las tuberías de Bitbucket (Beta) y en la ventana acoplable. No tengo experiencia previa en la integración de CI
Seguí this pregunta, pero no hay una descripción clara para los principiantes.
Estoy tratando de configurar la Integración Continua (CI) en Bitbucket Pipelines para el Proyecto de Android usando un contenedor de ventana acoplable
Quiero usar mi proyecto anterior de Android con este contenedor
Pasos que segui
Paso 1 Instaladas herramientas de software Docker. Instalado exitosamente.
Paso 2 Creó la máquina virtual con éxito
Paso 3 Contenedor creado desde Kitematic (Beta) Uber / Android-Build-Environment
Paso 4 Proyecto de construcción con éxito utilizando
$ eval "$(docker-machine env default)"
$ docker build -t uber/android-build-environment .
Paso 5 Cambia trabajando directamente al proyecto android.
Paso 6. El problema está en este paso mientras ejecutas este comando
docker run -i -v $PWD:/project -t uber/android-build-environment /bin/bash /project/ci/build.sh
Error viene
/bin/bash: /project/ci/build.sh: No such file or directory
Detalles de la máquina de acoplamiento
docker-machine ls
NAME ACTIVE DRIVER STATE URL SWARM DOCKER ERRORS
default - virtualbox Running tcp://192.168.99.100:2376 v1.12.1
Servicio Docker
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)
La imagen de uber está creada para su entorno de CI, creé una imagen de ventana acoplable típica que solo incluye Android build env . Incluía el último SDK y NDK. Solo puedes usar el siguiente ejemplo como tu bitbucket-pipelines.yml
image: mingc/android-build-box:latest
pipelines:
default:
- step:
caches:
- gradle
script:
- chmod +x gradlew
- ./gradlew assemble
Incluye los siguientes componentes:
- Ubuntu 17.10
- Android SDK 16 17 18 19 20 21 22 23 24 25 26 27 28
- Herramientas de compilación de 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.0 24.0.1 24.0.1 24.0.3 24.0.0 25.0.1 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
- extra-android-m2repository
- extra-google-m2repository
- extra-google-google_play_services
- Complementos de la API de Google
- Emulador de android
- Diseño de restricciones
- Prueba
- Python 2, Python 3
- Node.js, npm, React Native
- Ruby, RubyGems
- carril rápido
- Kotlin 1.3
También puede usar esta imagen de ventana acoplable para compilar su proyecto de Android con un solo comando de ejecución de ventana acoplable:
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''
Si entiendo su pregunta correctamente: técnicamente ni siquiera necesita instalar Docker en su máquina local para usarlo en sus tuberías de Bitbucket (aunque puede ser muy útil para la depuración).
Bitbucket Pipelines puede configurarse para usar un Docker de Docker Hub , y el que usted mencionó ( uber / android-build-environment ) funcionó bien para mí.
Simplemente agregue un bitbucket-pipelines.yml
a la raíz de su proyecto, por ejemplo:
image: uber/android-build-environment:latest
pipelines:
default:
- step:
script:
- build.sh
Me gusta organizar mi proceso de compilación en su propio archivo de script ash ( build.sh
), pero eso es opcional (en su lugar, podría poner varios comandos con viñetas en el archivo yaml bajo la directiva de script
). Se pueden encontrar ejemplos de (y más detalles sobre) el archivo bitbucket-pipelines.yml
en las páginas de Guías de idiomas para tuberías de Bitbucket .
Mi script build.sh
(también en la raíz del proyecto, pero podría ubicarse en un subdirectorio siempre y cuando se refiera a él como tal en su bitbucket-pipelines.yml
, por ejemplo scripts/build.sh
):
#!/bin/sh
mkdir "${ANDROID_HOME}/licenses" || true
echo "8933bad161af4178b1185d1a37fbf41ea5269c55" > "${ANDROID_HOME}/licenses/android-sdk-license"
./gradlew assembleDebug
La parte de licencias permite que el proceso de Android Gradle descargue automáticamente las dependencias de Android, como se menciona en esta answer .
Por si acaso, configura los permisos en el script de compilación en consecuencia:
git update-index --chmod=+x build.sh
Asegúrese de haber habilitado las tuberías de Bitbucket (desde la página de repo: Settings
-> Pipelines: Settings
-> Enable Pipelines
).
Luego simplemente bitbucket-pipelines.yml
el bitbucket-pipelines.yml
y build.sh
y empuje a su repositorio de BitBucket. La compilación de tuberías de Bitbucket para su proyecto debe comenzar poco después de su empuje. Las tuberías de Bitbucket descargarán el Docker de uber/android-build-environment
desde Docker Hub, build.sh
su proyecto y ejecutarán el script build.sh
dentro de Docker.
El proceso que describió para configurar el Docker en su máquina local puede ser realmente útil si su compilación de tuberías de Bitbucket falla y usted quiere tener el mismo entorno ejecutándose en su máquina local para que pueda experimentar con él y probar los cambios en la build.sh
script antes de realmente cometer y empujar a su repositorio.
También podría ser útil si ejecuta (localmente):
docker run -it uber/android-build-environment
Lo que iniciará el Docker (en su máquina local) y lo colocará en un shell interactivo, para que pueda navegar y obtener una mejor comprensión del entorno de Docker.
También tenga en cuenta que Bitbucket Pipelines clona su repo en el Docker como parte del proceso de compilación (que, por lo que pude ver), no lo hizo en el Docker que se ejecuta en su máquina local, lo que puede haber generado cierta confusión sobre su Su script build.sh
no está presente.
Si desea que exista un directorio en su máquina local dentro de un Docker (que está ejecutando en su máquina local, tal vez para probar la construcción de un proyecto en su máquina local dentro de un Docker que quiera usar), puede usar el siguiente comando para montar su directorio de trabajo actual a /project
dentro del Docker que se ejecuta localmente:
docker run -v `pwd`:/project -it uber/android-build-environment
Puede encontrar más detalles en Montar un directorio host como un volumen de datos .
Como @ming-c señaló en su answer , hay muchas otras imágenes de Docker disponibles en Docker Hub ; Sin duda, vale la pena buscar para ver si puede encontrar la imagen que mejor se adapte a sus necesidades.
Su comando docker run -i -v $PWD:/project -t uber/android-build-environment /bin/bash /project/ci/build.sh
asume que el archivo /project/ci/build.sh
está en el contenedor. ¿Está seguro de que está ejecutando este comando docker desde el directorio que lo contiene?
Si no está seguro, lo intentaría (desde el directorio de su proyecto)
docker run -it -v $PWD:/project uber/android-build-environment /bin/bash
y luego verifique los resultados de ls -a /project
cuando inicie sesión en el contenedor.
Otra cosa para asegurarse es que se puede ejecutar build.sh
, asegúrese de esto ejecutando chmod +x build.sh
en él.