Jenkins + docker自动化构建anroid项目

本文介绍目前最简洁的基于Jenkins和docker的自动化构建Android项目技术。是目前最优雅的方案。

2019年的春天,利用一个下午研究了Jenkins自动构建Android项目,为部门的App自动化构建做准备。上网搜索了一番,发现中文圈类的文章还停留在tomcat运行war包,然后手动安装配置环境的初级阶段,稍微好一点的知道使用docker但是却是自己写dockerfile,其实还是在里面把各种配置。使用容器技术让我们不需要再去下载jdk,不需要再去下载Android sdk,不需要再去配置环境变量,这些都是docker带来的好处。

  1. 准备
    一台linux服务器,安装了docker

  2. 通过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 执行构建,完成。

示例项目

你可能感兴趣的:(Jenkins + docker自动化构建anroid项目)