使用docker和bitbucket管道的android环境

时间:2016-10-01 11:47:41

标签: android continuous-integration continuous-deployment bitbucket-pipelines

我是Bitbucket管道(Beta)和docker的新手。没有以前的CI集成经验

我关注this问题,但没有明确的初学者描述

我正在尝试使用docker container

在Android项目的Bitbucket管道中设置持续集成(CI)

我想使用我之前使用此容器的android项目

我遵循的步骤

第1步。已安装的Docker软件工具。已成功安装。

第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详细信息

docker-machine ls
NAME      ACTIVE   DRIVER       STATE     URL                         SWARM   DOCKER    ERRORS
default   -        virtualbox   Running   tcp://192.168.99.100:2376           v1.12.1

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)

4 个答案:

答案 0 :(得分:22)

如果我正确理解您的问题:您在技术上甚至不需要在本地计算机上安装Docker,以便在您的Bitbucket管道中使用它(尽管它对调试非常有帮助)。

Bitbucket Pipelines可以配置为使用Docker Hub中的Docker,而你提到的那个(uber/android-build-environment)对我来说效果很好。

只需将bitbucket-pipelines.yml添加到项目的根目录,例如:

image: uber/android-build-environment:latest

pipelines:
  default:
    - step:
        script:
          - build.sh

我喜欢在其自己的灰脚本文件(build.sh)中组织我的构建过程,但这是可选(您可以在{{中添加多个项目符号命令)在script指令下的3}}文件。可以在yaml页面上找到bitbucket-pipelines.yml文件的示例(以及有关详细信息)。

我的build.sh脚本(也在项目的根目录中,但只要您在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依赖项,如Language guides for Bitbucket Pipelines中所述。

为了更好地衡量,answer相应地:

git update-index --chmod=+x build.sh

确保您已启用Bitbucket管道(来自您的回购页:Settings - > Pipelines: Settings - > Enable Pipelines)。

然后只需提交bitbucket-pipelines.ymlbuild.sh并推送到您的BitBucket仓库。为您的项目构建的Bitbucket管道应该在推送后不久开始。 Bitbucket Pipelines将从Docker Hub下载uber/android-build-environment Docker并检查您的项目并在Docker中运行build.sh脚本。

如果您的Bitbucket管道构建失败并且您希望在本地计算机上运行相同的环境,那么您在本地计算机上设置Docker的过程非常有用,这样您就可以对其进行试验并测试对实际提交并推送到您的回购之前的build.sh脚本。

如果你跑(本地),也可能会有用:

docker run -it uber/android-build-environment

这将启动Docker(在本地计算机上)并将您置于交互式shell中,以便您可以浏览并更好地了解Docker环境。

还要注意Bitbucket Pipelines在Docker中克隆你的repo作为构建过程的一部分(据我所知),你没有在本地机器上运行的Docker上做过,这可能导致了一些您对build.sh脚本不存在感到困惑。

如果您希望本地计算机上的目录存在于Docker中(您在本地计算机上运行,​​可能是为了测试在您想要使用的Docker中的本地计算机上构建项目),您可以使用以下内容命令将当前工作目录挂载到本地运行的Docker中的/project

docker run -v `pwd`:/project -it uber/android-build-environment

更多详细信息,请访问set the permissions on the build script

正如@ ming-c在Mount a host directory as a data volume中指出的那样,answer上还有许多其他Docker镜像可用;当然值得浏览一下,看看能否找到最适合您需求的图像。

答案 1 :(得分:14)

uber的图像是为他们的CI环境构建的,我创建了a typical docker image only include 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
  • 额外的Android-m2repository
  • 外谷歌-m2repository
  • 外谷歌-google_play_services
  • Google API插件
  • Android模拟器
  • 约束布局
  • TestNG的
  • Python 2,Python 3
  • Node.js,npm,React Native
  • Ruby,RubyGems
  • FASTLANE
  • Kotlin 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'

答案 2 :(得分:1)

您的命令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来确保这一点。

答案 3 :(得分:0)

您可以使用本指南:

https://github.com/danylovolokh/Setup-Free-Bitbucket-Cloud-CI

它非常详尽,它展示了如何:

  1. 更新内部版本号,内部版本名称等...
  2. 更新build.gradle
  3. 将更改提交并推送到存储库
  4. 收集变更日志
  5. 构建应用程序

其他步骤:

  1. 使用“发布”签名密钥对应用程序进行签名。
  2. 将apk文件上传到存储中以供将来使用。
  3. 将版本上传到Fabric Beta以进行测试。
相关问题