搭建Jenkins+Sonarqub+Mysql+Android(上篇)

本人阐述的是在Ubuntu16.04系统下搭建jenkins+sonarqub+mysql以实现对Android工程一键自动化打包,上传,邮件通知,代码质量分析全流程

1、 搭建jenkins

  1. JDK配置
    具体参照参见上篇文章
  2. Tomcat配置
    首先下载官网tomcat

    本文选择8.5.x版本用以支持java7android later

下载完成后为统一管理,在用户目录创建tools文件夹,并将tomcat压缩包移到该目录并解压

//解压tar.gz文件
tar zxvf apache-tomcat-8.5.32.tar.gz
  1. 下载Jenkins通用包(.war)
    此处下载2.121.1可维护稳定版本
    将下载的jenkins.war放到apache-tomcat-8.5.32/webapps下
  2. 启动tomcat
cd ~/tools/apache-tomcat-8.5.32/bin
./startup.sh
  1. 访问jenkins
    打开浏览器并输入http://localhost:8080/jenkins
    首次访问需要输入secret,至于secret是多少图形界面会提示你在哪;输入secret后会提示你安装插件,选择Install suggeted plugins即可
  2. jenkins pipeline连接sqlserver数据库 jenkins mysql_android

至此说明jenkins成功部署,完成了第一步


2. 配置android sdk

  1. 下载android sdk,此处过程简略,注意本人当时从官网下载的sdk后,发现sdk自带东西太少,导致Android工程无法构建,建议去别的平台下载功能更全的sdk
  2. 配置环境变量
sudo gedit ~/.bashrc

在.bashrc文件中追加如下字段

#config android

export ANDROID_HOME=/home/qwe/tools/android-sdk
export PATH=${ANDROID_HOME}/platform-tools:$PATH
export PATH=${ANDROID_HOME}/tools:$PATH
export PATH=${ANDROID_HOME}/tools/bin:$PATH
  1. jenkins配置android变量
    jenkins -> manger jenkins -> config system

3. 安装git

  1. 安装git
sudo apt-get update
sudo apt-get install git
  1. 配置git账号
git config --global user.name "Your Name"
git config --global user.email "youremail@domain.com"

4. jenkins 配置

  1. config jenkins url
    jenkins -> manger jenkins -> config system
  2. config JDK, Git
    jenkins -> manger jenkins -> glob config

5. build android project

  1. new item
    回到jenkins;jenkins -> new item

    输入自己的item名字,默认选择freestyle风格,点击OK
  2. config project
    2.1 配置git 仓库地址

    因为要访问仓库所以需要用户密码,需要配置Credentials,点击Add,进入下图页面;Kind 选择Username with password;输入你git的账号密码即可,返回到上页,credentials中勾选你刚创建到credential即可

2.2 config build

选择Invoke Gradle script进行build android project

jenkins pipeline连接sqlserver数据库 jenkins mysql_sonarqube_02

考虑到不同工程适用gradle版本不同,所以我们选择User Gradle Wrapper,这样完全依赖工程本身的gradlew,jenkins会自动下载所依赖的gradle;当然你也可以使用固定gradle版本进行build

jenkins pipeline连接sqlserver数据库 jenkins mysql_jenkins_03


在Tasks右边输入框中每行输入对应的task名称即可,通常是clean assembleRelease

save后点击左侧栏的build now,顺利的话project会构建成功

jenkins pipeline连接sqlserver数据库 jenkins mysql_mysql_04

构建成功后左侧的build histroy 列表会显示你构建记录,蓝色的点表示成功,红色表示失败

jenkins pipeline连接sqlserver数据库 jenkins mysql_sonarqube_05

为了能追踪每次构建的包,我们可以在assembleRelease/Debug任务后添加copy apk 任务,保存到一个备份目录,以便后期查阅

6. 备份APK文件,jenkins可直接访问

6.1 添加copy任务

在你的app build.gradle 添加copy 任务,下面代码添加到和android标签同一级层次

def jenkinsJobName = System.getenv('JOB_NAME') ?: "local_job"
    def jenkinsBuild = System.getenv('BUILD_NUMBER') ?: "0"
    def backPath = '/home/qwe/shared/android_build/' + jenkinsJobName + "/" + jenkinsBuild

    gradle.projectsEvaluated {

    assembleRelease.doLast {

        if (jenkinsJobName != "local_job") {

            println("==========begain copy apk file===========")

            copy {
                from('build/outputs/apk/release')
                into(backPath + '/apks')
                include('*.apk', '*.txt')
                exclude('**/*-unaligined.apk')
            }

            println("==========end copy apk file===========")


            println("==========begain copy mapping file===========")
            copy {
                from('build/outputs/mapping/release')
                into(backPath + '/apks/mapping')
                include('*.txt')
            }
            println("==========end copy mapping file===========")
        } else {
            println("==========execute task in local machine===========")
        }
    }


    assembleDebug.doLast {

        println("=============begin copy apk file==========")
        copy {
            from('build/outputs/apk/debug')
            into(backPath + '/apks')
            exclude('**/*-unaligined.apk')
        }

        println("=============end copy apk file==========")

    }
}

6.2 配置tomcat

配置tomcat作为文件服务器,以便jenkins可直接访问文件

cd ~/tools/apache-tomcat-8.5.32/conf
gedit server.xml

找到Connector标签添加URIEncoding属性设为utf-8

jenkins pipeline连接sqlserver数据库 jenkins mysql_jenkins_06

修改web.xml文件,将listing设为true

gedit web.xml

jenkins pipeline连接sqlserver数据库 jenkins mysql_sonarqube_07

创建download.xml文件
内容如下

<?xml versinotallow="1.0" encoding="UTF-8"?>
<Context path="/download" docBase="/home/qwe/shared" crossContext="true">
</Context>

将其放到apache-tomcat-8.5.32/conf/Catalina/localhost目录下

重启tomcat

cd ~/tools/apache-tomcat-8.5.32/bin/
./shutdown.sh
./startup.sh

至此在浏览器中可以通过http://localhost/download/来访问/home/qwe/shared目录的所有文件了

6.3 配置jenkins,以便通过build history直接访问对应job的备份文件

安装description setter plugin
jenkins -> manger jenkins -> mange plugins -> Avliable -> Filter 输入description setter 安装后重启jenkins

重启jenkins只需要访问http://localhost:8080/jenkins/restart即可

注意:
此处非常关键,不设置话点击build histroy链接无法跳转
jenkins -> mange jenkins -> Configure Global Security -> Markup Formatter 设为Safe HTML

成功后进入自己创建的Item -> configure -> PostBuild Actions -> set build descriptions

jenkins pipeline连接sqlserver数据库 jenkins mysql_tomcat_08

因为我这里已经添加了,所以显示灰色,填写自己需要访问文件的目录即可,红色横线替换自己ip即可

jenkins pipeline连接sqlserver数据库 jenkins mysql_jenkins_09

配置完毕后点击save,再次构建,顺利话build histroy会显示如下样式

jenkins pipeline连接sqlserver数据库 jenkins mysql_mysql_10

点击链接地址,就会前往对应job buildNumber的apk目录

jenkins pipeline连接sqlserver数据库 jenkins mysql_sonarqube_11


至此我们可以已经实现了jenknis 自动打包,并可在线访问对应build 的apk文件;

下一篇将在其基础上继续集成apk的上传,邮件通知功能