Jenkins+Gradle+android+SonarQube

來源:互聯網
上載者:User

標籤:

一、環境

1. ubuntu14.04(64位)2. jdk 1.73. ant 1.94. jenkins 1.6065. tomcat 7.0.56. android sdk7. gradle8. nexus9. 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:$PATH2. gradle環境變數    http://gradle.org/下載最新的包    vim ~/.bashrc    export GRADLE_HOME=/usr/local/lib/gradle2.2    export PATH=$GRADLE_HOME/bin:$PATH3. Jenkins環境變數    http://jenkins-ci.org/下載穩定版本    vim ~/.bashrc    export JENKINS_HOME=/home/roy/jenkins_home    export PATH=$JENKINS_HOME:$PATH4. android sdk 環境變數    vim ~/.bashrc    export ANDROID_HOME=/home/roy/soft/android-sdk    export PATH=$ANDROID_HOME/tools:$ANDROID_HOME/platform-tools:$PATH5. Jenkins外掛程式安裝    gradle plugin    sonar plugin6. 因為android sdk的檔案都是在32位的庫裡編譯在,所以在64為的作業系統上無法找打對應的庫,需要安裝    sudo apt-get install lib32stdc++6    sudo apt-get install lib32z1 lib32z1-dev7. nexus安裝配置    http://www.sonatype.org 下載最新的包    1. 解壓    2. 進入bin目錄執行./nexus start命令    3. http://localhost:8081/nexus 介面訪問使用者名稱和密碼是admin/admin1238. 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.nameif (name.equals(com.android.builder.core.BuilderConstants.DEBUG)) {  return; // Skip debug builds.}def task = project.tasks.create "jar${name.capitalize()}", Jartask.dependsOn variant.javaCompiletask.from variant.javaCompile.destinationDirartifacts.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

}

}

Jenkins+Gradle+android+SonarQube

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.