A jenkins docker image with Android SDK/NDK global install and the following pre-installed plugins :
- gitlab-plugin : build trigger on push
- gitlab-logo : gitlab repo icon on dashboard
- gitlab-oauth : gitlab authentication
- android-emulator : use android emulator in CI
- ws-cleanup : clean workspace before build
- slack : send slack notifications
- Embeddable Build Status Plugin : build status badge
Other packages are also downloaded to build Android applications correctly
docker run -p 8080:8080 -p 50000:50000 \
-v /home/user/Android/sdk:/opt/android/sdk \
-v /home/user/Android/ndk:/opt/android/ndk \
-v your_home/jenkins_home:/var/jenkins_home bertrandmartel/docker-jenkins-android
Variable name | description | sample value |
---|---|---|
ANDROID_SDK | Android SDK release name | r25.2.2 |
ANDROID_NDK | Android NDK release name | android-ndk-r12b |
ERASE_ANDROID_SDK | clear SDK directory before installing a new one | 1 or 0 |
ERASE_ANDROID_NDK | clear NDK directory before installing a new one | 1 or 0 |
ANDROID_BUILD_TOOLS_FILTER | additionnal build tools versions to install comma separated | 23.0.2,23.0.3 |
SSL_CERT | path to certificate (*) | |
SSL_KEY | path to key file (*) | |
SSL_DEST | path for the newly created JKS from the certs above (*) | |
SSL_NEW_PASS | newly created keystore password (*) |
(*) required only if using certificates instead of JKS (working with letsencrypt certs)
Example :
docker run -p 8080:8080 -p 50000:50000 \
-e "ANDROID_BUILD_TOOLS_FILTER=23.0.2,23.0.3" \
-e "ANDROID_SDK=r25.2.2" \
-e "ANDROID_NDK=android-ndk-r12b" \
-v /home/user/Android/sdk:/opt/android/sdk \
-v /home/user/Android/ndk:/opt/android/ndk \
-v your_home/jenkins_home:/var/jenkins_home bertrandmartel/docker-jenkins-android
https configuration is enabled by default with keystore.jks
in a keys
directory :
docker-compose up
Edit vars-template.sh
configuration, then :
source vars-template.sh
envsubst < stackfile-template.yml > stackfile.yml
docker-cloud stack create --name jenkins -f stackfile.yml
docker-cloud start jenkins
docker exec -it jenkins_image bash
- In your Gitlab domain go to
Admin
>Application
Create a new application with a chosen name and a redirection URI like this :
https://your-jenkins-domain:8083/securityRealm/finishLogin
Then, you will have generated Application ID
(client ID) and Secret (Client Secret) :
- Go to
Manage Jenkins
>Configure Global Security
Fill up checking Gitlab Authentication Plugin
in Access control
:
Now, Jenkins user will be authenticated via Gitlab
In Manage Jenkins
> Configure System
:
Gitlab URL is : https://<your host>:<your port>
Enter a Gitlab API Token that you got from Gitlab in Profile Settings
> Access Tokens
:
In your job configuration, Set GitLab connection
and Git
repository config as :
- Repository URL :
git@server/repo.git
- Name :
origin
- RefSpec :
+refs/heads/*:refs/remotes/origin/* +refs/merge-requests/*/head:refs/remotes/origin/merge-requests/*
- Branch specifier :
origin/${gitlabSourceBranch}
In Build Trigger
, set Build when a changed is pushed to Gitlab
:
In your gitlab repository go to Webhooks
:
Then, set the webhook URL as : https://<jenkins-host>:<port>/project/<your job>
:
In Manage Jenkins
> Configure System
:
Endpoint URL
is : https://<your-gitlab-host>:<port>/api/v3
In your job configuration, add a Slack Notification Post Build Action
:
- gitlab-plugin setup example : https://github.com/jenkinsci/gitlab-plugin/wiki/Setup-Example
- gitlab-oauth-plugin webhook fix : jenkinsci/gitlab-oauth-plugin#6