Jenkins + docker自动化构建anroid项目
2019-03-10 本文已影响4人
hglfNg
本文介绍目前最简洁的基于Jenkins和docker的自动化构建Android项目技术。是目前最优雅的方案。
2019年的春天,利用一个下午研究了Jenkins自动构建Android项目,为部门的App自动化构建做准备。上网搜索了一番,发现中文圈类的文章还停留在tomcat运行war包,然后手动安装配置环境的初级阶段,稍微好一点的知道使用docker但是却是自己写dockerfile,其实还是在里面把各种配置。使用容器技术让我们不需要再去下载jdk,不需要再去下载Android sdk,不需要再去配置环境变量,这些都是docker带来的好处。
-
准备
一台linux服务器,安装了docker -
通过docker运行Jenkins
docker run \
--rm \
-u root \
-p 8080:8080 \
-v jenkins-data:/var/jenkins_home \
-v /var/run/docker.sock:/var/run/docker.sock \
-v "$HOME":/home \
--name jenkins \
jenkinsci/blueocean
注意第四行我们创建了一个volumes 挂载 /var/jenkins_home
进入管理界面做一些基本配置,这一步任何教材都有介绍,这里不再赘述。
3.在需要构建的Android 项目根目录新建Jenkinsfile:
#!/usr/bin/env groovy
pipeline {
agent {
docker {
image 'alvrme/alpine-android:android-28'
args '-v $HOME/.m2:/root/.m2 -v $HOME/.gradle:/root/.gradle'
}
}
environment {
FLAVOR = build_flavor(env.BRANCH_NAME)
}
stages {
stage('Build') {
steps {
sh "./jenkins/build.sh ${FLAVOR}"
}
}
stage('Test') {
steps {
sh "./gradlew test"
}
}
stage('Delivery') {
steps {
//sh "./jenkins/deliver.sh ${FLAVOR} ${env.BRANCH_NAME}"
archiveArtifacts artifacts: "app/build/outputs/apk/${FLAVOR}/*.apk", fingerprint: true
}
}
stage('Cleanup') {
steps {
sh './gradlew clean'
}
}
}
post {
failure {
notifyFailed()
}
success {
notifySuccessed()
}
}
}
def build_flavor(branch_name) {
if (branch_name ==~ /r[.0-9]+/ || branch_name == 'master') {
return 'release'
}
return 'debug'
}
def notifySuccessed() {
}
def notifyFailed() {
}
直接使用alvrme/alpine-android:android-28镜像作为编译环境,编译需要的jdk、android sdk、环境变量已经配置好了,便于维护,以后要将编译环境升级,只需要修改一处就可以了,十分方便
注意args '-v $HOME/.m2:/root/.m2 -v $HOME/.gradle:/root/.gradle'
这句话是将容器alpine-android的gradle下载缓存目录挂载到jenkins容器的对应目录下,这样只要jenkins容器不关闭,多次编译就不用每次下载gradle和各种依赖库了。这一步很重要。
4 执行构建,完成。