私はBitbucketパイプライン(ベータ)とdockerに非常に慣れていません。
私は this 質問に従いましたが、初心者には明確な説明がありません
Android Project using docker container のBitbucket Pipelinesで継続的インテグレーション(CI)をセットアップしようとしています
以前のAndroidプロジェクトをこのコンテナで使用したい
私が従ったステップ
ステップ1。インストールされているDockerソフトウェアツール。正常にインストールされました。
ステップ2。仮想マシンが正常に作成されました
ステップ3。 Kitematic(ベータ)から作成されたコンテナー ber/Android-Build-Environment
ステップ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サービス
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)
私があなたの質問を正しく理解した場合: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.yml
とbuild.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イメージがあります。自分のニーズに最も適した画像を見つけることができるかどうかを確認するために、ブラウジングする価値は確かにあります。
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
次のコンポーネントが含まれます。
この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'
このガイドを使用できます:
https://github.com/danylovolokh/Setup-Free-Bitbucket-Cloud-CI
それは非常に網羅的であり、次の方法を示しています。
追加の手順:
コマンド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
を実行して確認してください。