Jenkins+Gradle+android+SonarQube

一、环境

1. ubuntu14.04(64位)
2. jdk 1.7
3. ant 1.9
4. jenkins 1.606
5. tomcat 7.0.5
6. android sdk
7. gradle
8. nexus
9. sonarqube

二、安装

1. JDK环境变量
    vim ~/.bashrc
    export JAVA_HOME=/usr/local/lib/jvm/jdk1.7.0_60
    export JRE_HOME=$JAVA_HOME/jre
    export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib
    export PATH=$JAVA_HOME/bin:$JRE_HOME/bin:$PATH

2. gradle环境变量
    http://gradle.org/下载最新的包
    vim ~/.bashrc
    export GRADLE_HOME=/usr/local/lib/gradle2.2
    export PATH=$GRADLE_HOME/bin:$PATH

3. Jenkins环境变量
    http://jenkins-ci.org/下载稳定版本
    vim ~/.bashrc
    export JENKINS_HOME=/home/roy/jenkins_home
    export PATH=$JENKINS_HOME:$PATH

4. android sdk 环境变量
    vim ~/.bashrc
    export ANDROID_HOME=/home/roy/soft/android-sdk
    export PATH=$ANDROID_HOME/tools:$ANDROID_HOME/platform-tools:$PATH

5. Jenkins插件安装
    gradle plugin
    sonar plugin

6. 因为android sdk的文件都是在32位的库里编译在,所以在64为的操作系统上无法找打对应的库,需要安装
    sudo apt-get install lib32stdc++6
    sudo apt-get install lib32z1 lib32z1-dev

7. nexus安装配置
    http://www.sonatype.org 下载最新的包
    1. 解压
    2. 进入bin目录执行./nexus start命令
    3. http://localhost:8081/nexus 接口访问用户名和密码是admin/admin123

8. sonarqube安装
    http://www.sonarqube.org 下载最新的包
    1. 解压
    2. 安装mysql数据库 sudo apt-get install mysql-server
        创建sonar数据库和用户
        CREATE DATABASE sonar CHARACTER SET utf8 COLLATE utf8_general_ci;

        CREATE USER ‘sonar‘ IDENTIFIED BY ‘sonar‘;
        GRANT ALL ON sonar.* TO ‘sonar‘@‘%‘ IDENTIFIED BY ‘sonar‘;
        GRANT ALL ON sonar.* TO ‘sonar‘@‘localhost‘ IDENTIFIED BY ‘sonar‘;

    2. 编辑配置文件conf/sonar.properties
        修改mysql数据库的配置和web端口及url的配置
        sonar.jdbc.username=sonar
        sonar.jdbc.password=sonar

        sonar.jdbc.url=jdbc:mysql://localhost:3306/sonar?useUnicode=true&characterEncoding=utf8&rewriteBatchedStatements=true&useConfigs=maxPerformance

        sonar.web.host=192.168.33.7
        sonar.web.context=
        sonar.web.port=9000

    3. sonar-runner配置conf/sonar-runner.properties
        sonar.jdbc.url=jdbc:mysql://localhost:3306/sonar?useUnicode=true&characterEncoding=utf8
        sonar.jdbc.username=sonar
        sonar.jdbc.password=sonar
        sonar.login=admin
        sonar.password=jstinno

三、 Jenkins配置

四、工程配置

    buildscript{

repositories{

mavenCentral();

}

dependencies{

classpath ‘com.android.tools.build:gradle:0.14+‘

}

tasks.withType(JavaCompile){

options.encoding = ‘UTF-8‘

}
}

apply plugin:‘android‘

dependencies{
compile fileTree(dir: ‘libs‘, include:“*.jar”)
}

android{

applicationVariants.all { variant ->

variant.outputs.each { output ->
  if(output.outputFile.name.indexOf(‘-debug.apk‘) > -1){
    output.outputFile = new File(
      output.outputFile.parent,
      output.outputFile.name.replace(".apk", "mirror.apk"))
    }
  }

}

signingConfigs{

myConfig{
  storeFile file("/home/roy/jenkins_home/jobs/ApkKeyStore")
  storePassword "android"
  keyAlias "brilliance"
  keyPassword "android"
}

}

buildTypes{

release{
  signingConfig signingConfigs.myConfig
}

}

compileSdkVersion 22
buildToolsVersion “22.0.1”
enforceUniquePackageName=false

lintOptions{

abortOnError false

}

sourceSets{

main{
  manifest.srcFile ‘AndroidManifest.xml‘
  java.srcDirs = [‘src‘]
  resources.srcDirs = [‘src‘]
  aidl.srcDirs = [‘src‘]
  renderscript.srcDirs = [‘src‘]
  res.srcDirs = [‘res‘]
  assets.srcDirs = [‘assets‘]
}

}

lintOptions{

abortOnError false

}
}

五、build.xml示例

六、apk自动安装到手机中

1. 开启手机开发者模式(通过单击设置->关于手机->版本号, 连续单击四次)
2. 在开发者选项中,开启USB调试和USB调试授权
问题处理:
    1. adb devices命令, 返回的结果是:

List of devices attached
???????????? no permissions
因为adb server需要以root的权限启动
在android-sdk/platform-tools目录下,执行

       $ ./adb kill-server
       $ sudo ./adb start-server
       在手机上选择Always allow from this computer?
       adb devices可以看到了

安装命令 gradle installRelease (gradle iR)

git clone [email protected]:jstinno/apps/CloudFile
git clone [email protected]:jstinno/apps/cloudclient
git clone [email protected]:jstinno/apps/CommonUpgrade

gradle AndroidDependencies 检查项目依赖关系
gradle clean uploadArchives 打包并上传到maven仓库

    buildscript{

repositories{

mavenCentral();

}

dependencies{

classpath ‘com.android.tools.build:gradle:0.14+‘

}

tasks.withType(JavaCompile){

options.encoding = ‘UTF-8‘

}
}

apply plugin: ‘android-library‘
apply plugin: ‘maven‘

android{

signingConfigs{

myConfig{
  storeFile file("/home/roy/jenkins_home/jobs/ApkKeyStore")
  storePassword "android"
  keyAlias "brilliance"
  keyPassword "android"
}

}

buildTypes{

release{
  signingConfig signingConfigs.myConfig
}

}

compileSdkVersion 22
buildToolsVersion “22.0.1”

sourceSets{

main{
  manifest.srcFile ‘AndroidManifest.xml‘
  java.srcDirs = [‘src‘]
  resources.srcDirs = [‘src‘]
  aidl.srcDirs = [‘src‘]
  renderscript.srcDirs = [‘src‘]
  res.srcDirs = [‘res‘]
  assets.srcDirs = [‘assets‘]
}

}

lintOptions{

abortOnError false

}
}

dependencies{
compile fileTree(dir: ‘libs‘, include:“*.jar”)
}

uploadArchives{
repositories.mavenDeployer{

name = ‘mavenCentralReleaseDeployer‘
repository(url: "http://192.168.33.25:8081/nexus/content/repositories/releases"){
  authentication(userName: ‘admin‘, password: ‘admin123‘)
}

snapshotRepository(url: "http://192.168.33.25:8081/nexus/content/repositories/snapshots/"){
  authentication(userName: ‘admin‘, password: ‘admin123‘)
}

pom.version = "1.0.0"
pom.artifactId = "cloudclient"
pom.groupId = "com.cloud"
pom.name = "cloudclient"
pom.packaging = "aar"

}

}

编译jar包上传本地maven仓库
buildscript{
repositories{

mavenCentral();

}

dependencies{

classpath ‘com.android.tools.build:gradle:0.14+‘

}

tasks.withType(JavaCompile){

options.encoding = ‘UTF-8‘

}
}

apply plugin: ‘android-library‘
apply plugin: ‘maven‘

dependencies{
compile fileTree(dir: ‘libs‘, include:“*.jar”)
}

android{

signingConfigs{

myConfig{
  storeFile file("/home/roy/jenkins_home/jobs/ApkKeyStore")
  storePassword "android"
  keyAlias "brilliance"
  keyPassword "android"
}

}

buildTypes{

release{
  signingConfig signingConfigs.myConfig
}

}

compileSdkVersion 22
buildToolsVersion “22.0.1”

sourceSets{

main{
  manifest.srcFile ‘AndroidManifest.xml‘
  java.srcDirs = [‘src‘]
  resources.srcDirs = [‘src‘]
  aidl.srcDirs = [‘src‘]
  renderscript.srcDirs = [‘src‘]
  res.srcDirs = [‘res‘]
  assets.srcDirs = [‘assets‘]
}

}

lintOptions{

abortOnError false

}

android.libraryVariants.all { variant ->

def name = variant.buildType.name
if (name.equals(com.android.builder.core.BuilderConstants.DEBUG)) {
  return; // Skip debug builds.
}
def task = project.tasks.create "jar${name.capitalize()}", Jar
task.dependsOn variant.javaCompile
task.from variant.javaCompile.destinationDir
artifacts.add(‘archives‘, task);

}

uploadArchives{

repositories.mavenDeployer{
  name = ‘mavenCentralReleaseDeployer‘
  repository(url: "http://192.168.33.25:8081/nexus/content/repositories/releases"){
    authentication(userName: ‘admin‘, password: ‘admin123‘)
  }

  snapshotRepository(url: "http://192.168.33.25:8081/nexus/content/repositories/snapshots/"){
    authentication(userName: ‘admin‘, password: ‘admin123‘)
  }

  pom.version = "1.0.0"
  pom.artifactId = "cloudclient"
  pom.groupId = "com.cloud"
  pom.name = "cloudclient"
  pom.packaging = "jar"
}

}
}

依赖其他apk的编译并安装
buildscript{
repositories{

mavenCentral()

}

dependencies{

classpath ‘com.android.tools.build:gradle:0.14+‘

}

tasks.withType(JavaCompile){

options.encoding = ‘UTF-8‘

}

}

apply plugin:‘android‘

repositories{

maven{

url "http://192.168.33.25:8081/nexus/content/repositories/releases"

}
}
dependencies{
compile fileTree(dir: ‘libs‘, include:“*.jar”)
compile “com.common:upgrade:1.0.0”
compile “com.cloud:cloudclient:1.0.0”
}

android{

applicationVariants.all { variant ->

variant.outputs.each { output ->
  String apk_name = output.outputFile.name;
  if(output.outputFile.name.indexOf(‘-debug.apk‘) > -1){
    output.outputFile = new File(
      output.outputFile.parent,
      output.outputFile.name.replace(".apk", "mirror.apk"))
  }else if(output.outputFile.name.indexOf(‘-release.apk‘) > -1){
      output.outputFile = new File(
      output.outputFile.parent,
      output.outputFile.name.replace(apk_name, "CloudFile-release.apk"))
  }
}

}

signingConfigs{

myConfig{
  storeFile file("/home/roy/jenkins_home/jobs/ApkKeyStore")
  storePassword "android"
  keyAlias "brilliance"
  keyPassword "android"
}

}

buildTypes{

release{
  signingConfig signingConfigs.myConfig
}

}

compileSdkVersion 22
buildToolsVersion “22.0.1”
enforceUniquePackageName=false

lintOptions{

abortOnError false

}

sourceSets{

main{
  manifest.srcFile ‘AndroidManifest.xml‘
  java.srcDirs = [‘src‘]
  resources.srcDirs = [‘src‘]
  aidl.srcDirs = [‘src‘]
  renderscript.srcDirs = [‘src‘]
  res.srcDirs = [‘res‘]
  assets.srcDirs = [‘assets‘]
}

}

lintOptions{

abortOnError false

}

}

时间: 2024-10-09 07:25:27

Jenkins+Gradle+android+SonarQube的相关文章

jenkins+gradle+android环境变量配置

1.jenkins添加gradle插件 2.环境变量配置[mac mini] 可以自己写profile文件,也可以放到/etc/.profile里面. JDK: export JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk1.7.0.jdk/Contents/Home Android[adt-bundle]: export ANDROID_HOME=/Users/git/android/adt-bundle-mac-x86_64-20130514/

windows环境下jenkins+gradle+Android 自动打包部署

第一步,搭建jenkins环境 1.安装下载jenkins jenkins运行依赖Java开发环境,安装jenkins前,先安装好JDK,并配置好环境变量 进入jenkins 的官网 https://jenkins.io/ , 根据搭建平台的不同下载,我使用的是 windows 平台 2.配置 Jenkins 安装完成后,在浏览器中访问 : http://localhost:8080/, 你将会看到如下界面 ,然后开始配置 Jenkins. 3.Jenkins 插件安装和超级管理员配置 填写完密

Jenkins+Gradle+Android+多渠道包 (一)

目的是QA可以自己登陆Jenkins选择要构建的版本,结果以邮件的方式通知(包括构建信息,静态代码分析结果,APK下载链接,二维码等),然后存档. 构建使用Gralde. 打包,生成二维码,存档是Python脚本实现. 打多渠道包 打多渠道包有很多方法,我用的是,生成一个签名后的APK,然后在APK包种META-INF目录下添加一个空文件,文件名包含渠道信息,Android中读这个文件来获取信息,通过代码的方式设置给友盟.这样可以避免反复编译,签名. 修改脚本 Python: def gener

Mac 环境下 Jenkins+Gradle 配制android 持续构建总结

主要是参考下面这片文章的. http://www.bkjia.com/Androidjc/989358.html 不过有几点需要注意: 1 jenkins安装的路径是/var/root/.jenkins 2 Gradle plugin如果下载不成功,可以直接去下面的链接下载,然后放到jenkins的plugins目录下 https://wiki.jenkins-ci.org/display/JENKINS/Gradle+Plugin 重启tomcat服务即可 3 如果gradle编译时报找不到a

Android开发之Jenkins+Gradle实现持续集成、apk多渠道打包

前言: 首先很高兴大家来阅读王某人这篇文章,我干肯定大部分公司的发版流程是这样的,android程序员小李打出各渠道包,发给运维小胡,小胡将个渠道包上传各大应用市场,就这样送审了... 我们反过来想一想,程序员小李的工作有意义吗,首先肯定耽误它手头的工作吧,对于公司来说程序员的时间就是金钱,还有如果哪一天程序员小李脑子发热了,忘记改debug参数了,忘记改versioncode值了,这些后果谁来承担呢? 不要怕,下面我们就来认识下今天得主人公,Jenkins+Gradle: Jenkins简介

jenkins+gradle+上传蒲公英(Android持续集成)

本文Android自动化打包采用jenkins+gradle+upload to pyger的方式来实现,job执行完后只需要打开链接扫描二维码即可下载apk. 一.环境准备 1.下载Android SDK(最好下载开发工具Android Studio) 2.安装jenkins 二.配置jenkins变量 配置Android自动打包之前需要下载两个插件,gradle和upload to pyger. 1.安装gradle插件:系统管理->管理插件 2.安装upload_to_pyger插件:系统

Jenkins构建Android项目持续集成之findbugs的使用

题外话 这篇本来和之前的系列要一起出的,但是因为中间公司要发布一个版本,给耽搁了,今天工作做完了,又闲了下来.所以就又来继续jenkins构建Android项目持续集成系列的findbugs篇. Findbugs简介 关于findbugs的介绍,可以自行百度下,这里贴下百度百科的介绍.findbugs是一个静态分析工具,它检查类或者 JAR 文件,将字节码与一组缺陷模式进行对比以发现可能的问题.这组缺陷模式是可配置的,通过配置,可以过滤掉一些我们不想或不需要检测的问题. findbugs在gra

使用Jenkins进行android项目的自动构建(3)

建立Jenkins项目 1. "新增作业"->填写作业名称->选择"建置 Maven 2 或 3 專案"->OK.新增成功后会进入"組態設定",暂时先保留默认值,稍后再进行设定. 2. 按一下"马上建置",会显示"已排入建置",然后在"建置歷程"会见到#1的链接,点入该链接并选择"終端機輸出",这时会见到一个失败的构建记录.当然会失败,因为我们还未为

gradle android L problem

Change uses-sdk to <uses-sdk tools:node="replace" /> and addxmlns:tools="http://schemas.android.com/tools" in AndroidManifest.xml <?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="h