If I understand your question correctly: you technically don't even need to install Docker on your local machine in order to use it in your Bitbucket Pipelines (although it can be quite helpful for debugging).
Bitbucket Pipelines can be configured to use a Docker from Docker Hub, and the one you mentioned (uber/android-build-environment) worked well for me.
Simply add a bitbucket-pipelines.yml
to the root of your project, for example:
image: uber/android-build-environment:latest
pipelines:
default:
- step:
script:
- build.sh
I like to organize my build process in it's own ash script file (build.sh
) but that is optional (you could instead put multiple bulleted commands in the yaml file under the script
directive). Examples of (and more details about) the bitbucket-pipelines.yml
file can be found on the Language guides for Bitbucket Pipelines page.
My build.sh
script (also in the root of the project, but could be placed in a subdirectory as long as you refer to it as such in your bitbucket-pipelines.yml
, e.g. scripts/build.sh
):
#!/bin/sh
mkdir "${ANDROID_HOME}/licenses" || true
echo "8933bad161af4178b1185d1a37fbf41ea5269c55" > "${ANDROID_HOME}/licenses/android-sdk-license"
./gradlew assembleDebug
The licenses portion allows the Android Gradle process to automatically download Android dependencies for you, as mentioned in this answer.
For good measure, set the permissions on the build script accordingly:
git update-index --chmod=+x build.sh
Make sure that you've enabled Bitbucket Pipelines (from your repo page: Settings
-> Pipelines: Settings
-> Enable Pipelines
).
Then just commit the bitbucket-pipelines.yml
and build.sh
and push to your BitBucket repo. The Bitbucket Pipelines build for your project should begin shortly after your push. The Bitbucket Pipelines will download the uber/android-build-environment
Docker from Docker Hub and checkout your project and run the build.sh
script within the Docker.
The process you were describing of setting up the Docker on your local machine can be really helpful if your Bitbucket Pipelines build fails and you want to have the same environment running on your local machine so you can experiment with it and test changes to the build.sh
script before actually committing and pushing to your repo.
Might also prove helpful if you ran (locally):
docker run -it uber/android-build-environment
Which will start up the Docker (on your local machine) and put you in an interactive shell, so that you can browse around and gain a better understanding of the Docker environment.
Also note that the Bitbucket Pipelines clones your repo in the Docker as part of the build process (which as far as I could tell) you had not done on the Docker running on your local machine, which may have led to some of your confusion about your build.sh
script not being present.
If you want a directory on your local machine to exist within a Docker (that you are running on your local machine, perhaps to test building a project on your local machine within a Docker you want to use) you can use the following command to mount your current working directory to /project
within the locally running Docker:
docker run -v `pwd`:/project -it uber/android-build-environment
More details can be found at Mount a host directory as a data volume.
As @ming-c pointed out in their answer, there are many other Docker images available on Docker Hub; it is certainly worth browsing around to see if you can find an image best suited to your needs.