我是Bitbucket管道(Beta)和docker的新手 . 没有以前的CI集成经验
我跟着this问题,但对初学者没有明确的描述
我正在尝试使用docker container在Android项目的Bitbucket管道中设置持续集成(CI)
我想在这个容器中使用我以前的android项目
我遵循的步骤
Step 1 . 已安装的Docker软件工具 . 成功安装 .
Step 2 . 成功创建虚拟机
Step 3 . 从Kitematic(Beta)创建的容器Uber/Android-Build-Environment
Step 4 . 使用成功构建项目
$ eval "$(docker-machine env default)"
$ docker build -t uber/android-build-environment .
Step 5 . 改变直接工作到android项目
Step 6. Problem is in this step while running this command
docker run -i -v $PWD:/project -t uber/android-build-environment /bin/bash /project/ci/build.sh
Error come :
/bin/bash: /project/ci/build.sh: No such file or directory
Docker-machine details
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
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)
3 回答
如果我正确理解你的问题:你在技术上甚至不需要在你的本地机器上安装Docker以便在你的Bitbucket管道中使用它(尽管它对调试非常有帮助) .
Bitbucket Pipelines可以配置为使用Docker Hub中的Docker,而你提到的那个(uber/android-build-environment)对我来说效果很好 .
只需将
bitbucket-pipelines.yml
添加到项目的根目录,例如:我喜欢在它自己的灰脚本文件(
build.sh
)中组织我的构建过程,但这是可选的(您可以在script
指令下的yaml文件中放置多个项目符号) . 有关bitbucket-pipelines.yml
文件的(和更多详细信息)的示例可以在Language guides for Bitbucket Pipelines页面上找到 .我的
build.sh
脚本(也在项目的根目录中,但只要您在bitbucket-pipelines.yml
中引用它就可以放在子目录中,例如scripts/build.sh
):许可证部分允许Android Gradle进程自动为您下载Android依赖项,如answer中所述 .
为了更好的衡量,set the permissions on the build script相应地:
确保您已启用Bitbucket管道(来自您的仓库页面:
Settings
- >Pipelines: Settings
- >Enable Pipelines
) .然后只需提交
bitbucket-pipelines.yml
和build.sh
并推送到您的BitBucket仓库 . 为您的项目构建的Bitbucket Pipelines应该在推送后不久开始 . Bitbucket Pipelines将从Docker Hub下载uber/android-build-environment
Docker并检查您的项目并在Docker中运行build.sh
脚本 .如果您的Bitbucket管道构建失败并且您希望在本地计算机上运行相同的环境,那么您在本地计算机上设置Docker的过程非常有用,这样您就可以对其进行试验并测试对
build.sh
脚本的更改在实际提交并推送到您的回购之前 .如果你跑(本地)可能也会有用:
这将启动Docker(在本地计算机上)并将您置于交互式shell中,以便您可以浏览并更好地了解Docker环境 .
还要注意Bitbucket Pipelines在Docker中克隆你的repo作为构建过程的一部分(据我所知),你没有在你的本地机器上运行的Docker上做过,这可能会导致你的一些混乱你的
build.sh
脚本没有出现 .如果您希望本地计算机上的目录存在于Docker中(您在本地计算机上运行,可能是为了测试在您想要使用的Docker中的本地计算机上构建项目),可以使用以下命令进行安装当前运行的Docker中当前工作目录为
/project
:更多细节可以在Mount a host directory as a data volume找到 .
正如@ ming-c在answer中指出的那样,Docker Hub上还有许多其他Docker镜像可用;当然值得浏览,看看你是否能找到最适合你需求的图像 .
uber的图像是为他们的CI环境构建的,我创建了a typical docker image only include Android build env . 它包括最新的SDK和NDK . 您可以使用以下示例作为bitbucket-pipelines.yml
它包括以下组件:
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
extra-android-m2repository
extra-google-m2repository
extra-google-google_play_services
Google API插件
Android模拟器
约束布局
TestNG
Python 2,Python 3
Node.js,npm,React Native
Ruby,RubyGems
fastlane
Kotlin 1.3
您还可以使用此docker镜像使用单个docker run命令构建Android项目:
您的命令
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
来确保这一点 .