Jenkins+Gradle+android+SonarQube

1、環境 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. sonarqubejava

2、安裝 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:$PATHmysql

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

3、 Jenkins配置android

4、工程配置 buildscript{ repositories{ mavenCentral(); }c++

dependencies{ classpath 'com.android.tools.build:gradle:0.14+' }git

tasks.withType(JavaCompile){ options.encoding = 'UTF-8' } }web

apply plugin:'android'sql

dependencies{ compile fileTree(dir: 'libs', include:"*.jar") }數據庫

android{ubuntu

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")) } } }vim

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 } }

5、build.xml示例

6、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 git@192.168.33.6:jstinno/apps/CloudFile
git clone git@192.168.33.6:jstinno/apps/cloudclient git clone git@192.168.33.6: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 }

}

相關文章
相關標籤/搜索
本站公眾號
   歡迎關注本站公眾號,獲取更多信息