27

我对 Bitbucket 管道 (Beta) 和 docker 非常陌生。之前没有 CI 集成经验

我跟着这个问题,但对初学者没有明确的描述

我正在尝试使用docker 容器在 Android 项目的 Bitbucket 管道中设置持续集成 (CI)

我想在这个容器中使用我以前的 android 项目

我遵循的步骤

步骤 1。安装了 Docker 软件工具。安装成功。

步骤 2。成功创建虚拟机

步骤 3。从 Kitematic (Beta) Uber/Android-Build-Environment创建容器

成功 Docker full

第 4 步。使用成功构建项目

$ eval "$(docker-machine env default)"

$ docker build -t uber/android-build-environment .

在此处输入图像描述

步骤 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

错误图像

Docker 机器详细信息

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 机器 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

4 回答 4

23

如果我正确理解了您的问题:从技术上讲,您甚至不需要在本地机器上安装Docker即可在您的 Bitbucket 管道中使用它(尽管它对调试很有帮助)。

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

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

image: uber/android-build-environment:latest

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

我喜欢在它自己build.shash脚本文件(可以在Bitbucket Pipelines 的语言指南页面上找到该文件script的示例(以及有关该文件的更多详细信息) 。bitbucket-pipelines.yml

我的build.sh脚本(也在项目的根目录中,但可以放在子目录中,只要您在bitbucket-pipelines.yml, eg中这样引用它scripts/build.sh):

#!/bin/sh

mkdir "${ANDROID_HOME}/licenses" || true
echo "8933bad161af4178b1185d1a37fbf41ea5269c55" > "${ANDROID_HOME}/licenses/android-sdk-license"

./gradlew assembleDebug

许可证部分允许 Android Gradle 进程自动为您下载 Android 依赖项,如本答案中所述。

为了更好地衡量,请相应地设置构建脚本的权限

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

确保您已启用 Bitbucket Pipelines(来自您的 repo 页面:Settings-> Pipelines: Settings-> Enable Pipelines)。

然后只需提交bitbucket-pipelines.ymlandbuild.sh并推送到您的 BitBucket 存储库。为您的项目构建的 Bitbucket Pipelines 应该在您推送后不久开始。Bitbucket Pipelinesuber/android-build-environment将从 Docker Hub 下载 Docker 并签出您的项目并build.sh在 Docker 中运行脚本。


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

如果您(在本地)运行,也可能会有所帮助:

docker run -it uber/android-build-environment

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

另请注意,Bitbucket Pipelines 将您在 Docker 中的存储库克隆为构建过程的一部分(据我所知),您没有在本地机器上运行的 Docker 上完成,这可能导致您对您的build.sh脚本不存在。

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

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

可以在将主机目录挂载为数据卷中找到更多详细信息。

正如@ming-c 在他们的回答中指出的那样,Docker Hub上还有许多其他可用的 Docker 镜像;当然值得四处浏览,看看您是否能找到最适合您需求的图像。

于 2016-10-15T04:47:44.857 回答
19

uber 的镜像是为他们的 CI 环境构建的,我创建了一个典型的 docker 镜像,只包含 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

您还可以通过特定的方式在 GitHub Actions 中使用container

    runs-on: ubuntu-18.04
    container: mingc/android-build-box:latest

它包括以下组件:

  • Ubuntu 18.04
  • Android SDK
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
  • 安卓构建工具:
    • 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
    • 29.0.2 29.0.3
    • 30.0.0
  • 安卓 NDK r21
  • 安卓模拟器
  • 测试NG
  • 蟒蛇2,蟒蛇3
  • Node.js、npm、React Native
  • 红宝石,红宝石
  • 快车道
  • 科特林

您还可以使用此 docker 映像通过单个 docker run 命令构建您的 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'
于 2016-10-27T21:44:04.880 回答
2

您可以使用本指南:

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

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

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

附加步骤:

  1. 使用“发布”签名密钥对应用程序进行签名。
  2. 将 apk 文件上传到存储以供将来使用。
  3. 将版本上传到 Fabric Beta 以进行测试。
于 2019-03-17T21:42:53.697 回答
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一点。

于 2016-10-11T21:58:21.143 回答