web-dev-qa-db-ja.com

android dockerおよびbitbucketパイプラインを使用する環境

私はBitbucketパイプライン(ベータ)とdockerに非常に慣れていません。

私は this 質問に従いましたが、初心者には明確な説明がありません

Android Project using docker container のBitbucket Pipelinesで継続的インテグレーション(CI)をセットアップしようとしています

以前のAndroidプロジェクトをこのコンテナで使用したい

私が従ったステップ

ステップ1。インストールされているDockerソフトウェアツール。正常にインストールされました。

ステップ2。仮想マシンが正常に作成されました

ステップ3。 Kitematic(ベータ)から作成されたコンテナー ber/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マシンの詳細

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)
24
Java_begins

私があなたの質問を正しく理解した場合:Bitbucket Pipelinesで使用するために、技術的にローカルマシンに Docker をインストールする必要さえありません(ただし、デバッグには非常に役立ちます) )。

Bitbucket Pipelinesは、 Docker Hub からのDockerを使用するように構成でき、あなたが言及したもの( uber/Android-build-environment )が機能しました私にとっても。

プロジェクトのルートにbitbucket-pipelines.ymlを追加するだけです。次に例を示します。

image: uber/Android-build-environment:latest

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

ビルドプロセスを独自のashスクリプトファイル(build.sh)に整理したいのですが、これはoptionalです(代わりに、複数の箇条書きコマンドを yamlscriptディレクティブの下のファイル)。 bitbucket-pipelines.ymlファイルの例(および詳細)は、 Bitbucket Pipelines の言語ガイドにあります。

私の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依存関係をダウンロードすることができます。この answer

適切な対策として、 ビルドスクリプト に応じて権限を設定します。

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

Bitbucket Pipelinesが有効になっていることを確認します(リポジトリページから:Settings-> Pipelines: Settings-> Enable Pipelines)。

次に、bitbucket-pipelines.ymlbuild.shをコミットし、BitBucketリポジトリにプッシュします。プロジェクトのBitbucket Pipelinesビルドは、プッシュの直後に開始する必要があります。 Bitbucket Pipelinesは、Docker Hubからuber/Android-build-environment Dockerをダウンロードしてプロジェクトをチェックアウトし、Docker内でbuild.shスクリプトを実行します。


ローカルマシンでのDockerの設定について説明していたプロセスは、Bitbucket Pipelinesビルドが失敗し、同じ環境をローカルマシンで実行して、それを試してbuild.shスクリプトへの変更をテストしたい場合に非常に役立ちます。実際にコミットしてリポジトリにプッシュする前。

(ローカルで)実行した場合にも役立つことがあります。

docker run -it uber/Android-build-environment

これにより、(ローカルマシンで)Dockerが起動し、インタラクティブなシェルが表示されるので、閲覧してDocker環境をよりよく理解できます。

また、Bitbucket Pipelinesは、ローカルマシン上で実行されているDockerで実行していないビルドプロセス(私が知る限り)の一部として、Docker内のリポジトリを複製することに注意してください。 build.shスクリプトが存在しない。

ローカルマシン上のディレクトリをDocker内に存在させたい場合(ローカルマシン上で実行している場合、おそらく使用したいDocker内のロー​​カルマシンでプロジェクトのビルドをテストするため)、次のコマンドを使用してマウントできます。ローカルで実行されているDocker内の現在の作業ディレクトリを/projectに設定します。

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

詳細については、 ホストディレクトリをデータボリュームとしてマウントする を参照してください。

@ ming-cが answer で指摘したように、 Docker Hub で利用できる他の多くのDockerイメージがあります。自分のニーズに最も適した画像を見つけることができるかどうかを確認するために、ブラウジングする価値は確かにあります。

22
Travis

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

次のコンポーネントが含まれます。

  • 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-m2リポジトリ
  • extra-google-m2repository
  • extra-google-google_play_services
  • Google APIアドオン
  • Android Emulator
  • 制約レイアウト
  • TestNG
  • Python 2、Python 3
  • Node.js、npm、React Native
  • Ruby、RubyGems
  • 追い越し車線
  • Kotlin 1.3

このdockerイメージを使用して、Androidプロジェクトを1つのdocker runコマンドでビルドすることもできます。

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'
15
Ming C

このガイドを使用できます:

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

それは非常に網羅的であり、次の方法を示しています。

  1. ビルド番号、ビルドバージョン名などを更新します...
  2. Build.gradleを更新する
  3. 変更をコミットしてリポジトリにプッシュする
  4. 変更ログを収集する
  5. アプリケーションを構築する

追加の手順:

  1. 「リリース」署名鍵でアプリケーションに署名します。
  2. 今後の使用のために、apkファイルをストレージにアップロードします。
  3. テスト目的でバージョンをファブリックベータにアップロードします。
1
Danylo Volokh

コマンド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の結果を確認します。

もう1つ確認することは、build.shの実行が許可されていることです。chmod +x build.shを実行して確認してください。

1
mickadoo