Android app Jenkins Pipeline job configuration
Note
TL;DR
- Complete example of a Jenkins pipeline for Android application builds — with Gerrit-triggered verification, Gradle-based build (./gradlew clean build), artifact archiving for non-Gerrit builds, and review label posting via setGerritReview().
- Also shows the simplified pattern using Amarula Solutions’ Verification shared library (com.amarula.Verification) with verifyBuild().
A complete example in how to configure the pipeline is given in Android Jenkins Continue integration. What is needed is configure the project in order to have verified label as shown in the picture
Pipeline Script
Node master is setup with gradle installation and android sdk in order to build android application. We are using credential of jenkins-builder-android in order to checkout code from gerrit for aevi-albert projects and amarula* groups
node('android-build') {
def gerritTrigger = true
stage('checkout') {
sshagent(['9af8a985-9516-467e-b9cb-0174692fe8c0']) {
dir("barcode-scanner-app") {
deleteDir()
}
sh 'git clone ssh://jenkins-builder-amarula@gerrit-review.amarulasolutions.com:29418/aevi-albert/barcode-scanner-app -b master'
}
// Fetch the changeset to a local branch using the build parameters provided to the
// build by the Gerrit plugin...
try {
sshagent(credentials: ['9af8a985-9516-467e-b9cb-0174692fe8c0'], ignoreMissing: true) {
def changeBranch = "change-${GERRIT_CHANGE_NUMBER}-${GERRIT_PATCHSET_NUMBER}"
withEnv(["changeBranch=${changeBranch}"]) {
dir("barcode-scanner-app") {
sh 'git fetch origin ${GERRIT_REFSPEC}:${changeBranch}'
sh 'git checkout ${changeBranch}'
}
}
}
} catch (err) {
println("Normal build")
gerritTrigger = false
}
}
stage('build') {
try {
echo "stage build"
dir("barcode-scanner-app") {
echo "invoke gradle"
sh './gradlew clean'
sh './gradlew build'
}
if (gerritTrigger) {
setGerritReview()
} else {
archiveArtifacts artifacts: 'barcode-scanner-app/build/outputs/apk/*.apk', fingerprint: true
}
} catch (err) {
if (gerritTrigger) {
setGerritReview()
}
throw err
}
}
}
Manage of exception is suboptimal right now. This script let doing manual build and build by trigger. One important note:
If you have some shell script that need to read some environment from the groovy this should be exported using withEnv(["changeBranch=${changeBranch}"])