Android项目的持续集成:Gradle+SonarQube+Jenkins

时间:2021-01-17 08:00:21

升级Jenkins

原有的Jenkins版本过旧,所以需要升级。升级过程比较简单,就是下载了新的jenkins.war丢到tomcat上就完成了。
注意的是新版本的Jenkins要求在JDK8下运行。

升级SonarQube

旧SonarQube是4.xd LST版本,如果根据官方文档要求,必须先升级到5.x LST版本,再升级到6.x版本。由于SonarQube的数据没有保留的必要,所以就直接升级了,同样要求在JDK8环境下运行,所以对配置做了些修改,并顺手配置上了LDAP

修改/usr/local/sonarqube-6.2/conf/wrapper.conf 
#设置使用JDK1.8
wrapper.java.command=/usr/local/jdk1.8.0_65/bin/java
修改/usr/local/sonarqube-6.2/conf/sonar.properties
#设置使用的数据库,见数据库相关部分
#设置整合LDAP
#LDAP authentication
sonar.security.realm=LDAP
sonar.security.savePassword=false
ldap.url=ldap://xxx.xxx.xxx.xxx:389
#User Configuration
ldap.user.baseDn=ou=xxxxx,dc=openldap,dc=fs,dc=com
ldap.bindDn=cn=Manager,dc=openldap,dc=fs,dc=com
ldap.bindPassword=xxxxx
ldap.user.request=uid={0}
ldap.user.emailAttribute=email

给Jenkins所在服务器安装Android SDK

搜出来的很多文章都是说到官网直接下载SDK,但现在官网从25.x版本开始已经没有了直接下载的页面,改为先下载SDKManager(command line only)再按需下载工具。

所以最后找到另外一篇文章,提供的是24.x的SDK下载版本,不过只要按照它的做法来升级,一样可以升级到最新版。
http://moonlightbox.logdown.com/posts/2016/02/01/linux-install-android-sdk-in-centos7

集成SonarQube到Gradle

build.gradle上加上以下:

plugins {
id "org.sonarqube" version "2.2"
}
apply plugin: 'org.sonarqube'
sonarqube {
properties {
property "sonar.projectName", "diamond-cfe-android"
property "sonar.projectKey", "diamond-cfe-android"
}
}

gradle.properties上加上sonarqube服务器信息

systemProp.sonar.host.url=http://192.168.6.96:9000

systemProp.sonar.login=admin

systemProp.sonar.password=admin

根据以下文章提到的方法,把Sonar上的Sonar way和Android Lint两种profile合并为一个,我命名为Sonar and Android Lint way
http://macoscope.com/blog/using-sonarqube-with-jenkins-continuous-integration-and-github-to-improve-code-review/

项目根目录加上sonar-project.properties

# My project------修改成你的项目名称
sonar.projectKey=diamond-cfe-android
sonar.projectName=diamond-cfe-android
sonar.projectVersion=1.0
# src---------修改成你的源文件夹路径,多个路径逗号隔开
sonar.sourceEncoding=UTF-8
sonar.sources=app/src/main/java
sonar.java.source=app/src/main/java
# binDir--------修改成你的二进制文件夹路径
sonar.binaries=app/build/intermediates/classes
sonar.profile=Sonar and Android Lint way
sonar.java.binaries=app/build/intermediates/classes
sonar.android.lint.report=app/build/outputs/lint-results-release-fatal.xml

以上配置后可以使用以下命令测试结果是否生成:
./gradlew sonarqube

添加Jenkins任务

主要讲构建的步骤,根据项目特点,有三个:
1. 执行脚本改写local.properties,目的是保证sdk.dir是指定的路径
echo sdk.dir=/opt/android-sdk_r24.4.1-linux>$WORKSPACE/local.properties
2. 执行Gradle构建
选额Use Gradle Wrapper,勾上Make gradlew executable和From Root Build Script Dir,switches是clean build sonarqube,其他空白
3.执行SonarQube Scanner
JDK一定要使用1.8,如果没有,需要在Manage Jenkins-》Global Tool Configuration的JDK一项配置,建议配置多个JDK方便切换(SonarQube Scanner,Gradle,Maven都可以在这里配置多个)
Path to project properties填上sonar-project.properties