jenkins+git+android studio自动化构建(持续集成)

  上一篇jenkins+svn+android studio自动化构建(持续集成)已经描述了jenkins环境的搭建,这里就不在继续描述了,简单的看一下与svn的差异在哪里

  邮件主题中,svn版本号:${SVN_REVISION}<br/>   变成了    GIT版本号:${GIT_REVISION}<br/>

  

  以下给出脚本,本来是想跟svn一样,版本编译好了,把编译结果和版本号修改自动push到git库中的,但是jenkins获取源码好像不是clone的,所以没有办法提交,这个以后有空可以研究一下,代码先贴出来,权当是gradle脚本中使用git命令的方法吧

 

  project的build.gradle,dependencies中增加

classpath group: 'org.tmatesoft.svnkit', name: 'svnkit', version: '1.8.11'
    classpath 'org.ajoberstar:gradle-git:1.2.0'

  以下是app的build.gradle

apply plugin: 'com.android.application'
import org.ajoberstar.grgit.*
import org.ajoberstar.grgit.auth.*
import org.ajoberstar.grgit.operation.*

android {
    compileSdkVersion 22
    buildToolsVersion "22.0.1"

    defaultConfig {
        // 包名
        applicationId "com.zhb.studiotest"
        minSdkVersion 19
        targetSdkVersion 22
        versionCode 1
        versionName "1.0.0.1"
        manifestPlaceholders = [ CHANNEL_NAME:"Unspecified",APPLICATION_LABLE:"StudioTest"]
    }

    sourceSets.main.jni.srcDirs = []
    sourceSets.main.jniLibs.srcDir 'src/main/libs'

    def versionPropsFile = file('version.properties')
    if (versionPropsFile.canRead()) {
        def Properties versionProps = new Properties()
        versionProps.load(new FileInputStream(versionPropsFile))
        def prename = versionProps['VERSION_NAME_MAJOR']
        def name = versionProps['VERSION_NAME_BUILD'].toInteger()
        def runTasks = gradle.startParameter.taskNames
        if ('buildAll' in runTasks) {
            name++
        }
        versionProps['VERSION_NAME_BUILD']=name.toString()
        versionProps.store(versionPropsFile.newWriter(), null)
        defaultConfig {
            versionName prename + name
        }
    }

    signingConfigs {
        releaseConfig {
            // 写死签名密码
            keyAlias 'haibo.zhou'
            keyPassword 'hbzhou0622'
            storeFile file("keystore.jks")
            storePassword 'hbzhou0622'
        }
    }
    productFlavors {
        wandoujia {}
        baidu {}
        //c360 {}
        //uc {}
        productFlavors.all { flavor ->
            applicationId = "com.zhb."+name
            flavor.manifestPlaceholders = [UMENG_CHANNEL_VALUE: name,APPLICATION_LABLE:name]
        }
     
    }

    buildTypes {
        debug {
            buildConfigField "boolean", "LOG_DEBUG", "true"
            versionNameSuffix "-debug"
            minifyEnabled false
            zipAlignEnabled false
            shrinkResources false
        }
        release {
            buildConfigField "boolean", "LOG_DEBUG", "false"
            minifyEnabled true
            zipAlignEnabled true
            shrinkResources true
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
            signingConfig signingConfigs.releaseConfig

            applicationVariants.all { variant ->
                // 修改APK名称
                variant.outputs.each { output ->
                    def file = output.outputFile
                    def fileName = file.name
                    fileName = fileName.replace(".apk", "-V${defaultConfig.versionName}.apk")
                    fileName = fileName.replace("app", "StudioTest")
                    fileName = fileName.replace("debug-unaligned", "debug")
                    output.outputFile = new File(file.parent, fileName)
                }
                // 修改values.xml
                variant.mergeResources.doLast(){
                    File valuesFile = file("${buildDir}/intermediates/res/merged/${variant.dirName}/values/values.xml")
                    String content = valuesFile.getText('UTF-8')
                    content = content.replaceAll("CHANNEL_NAME","${variant.productFlavors[0].name}")
                    valuesFile.write(content,'UTF-8')
                }
            }
        }
    }
}

task generateZip(type: Zip){
    println 'adfadsfasda123213d'
    def versionPropsFile = file('version.properties')
    def Properties versionProps = new Properties()
    versionProps.load(new FileInputStream(versionPropsFile))
    def prename = versionProps['VERSION_NAME_MAJOR']
    def name = versionProps['VERSION_NAME_BUILD'].toInteger()
    def version = "V" + prename + name + "("+getGitVersion()+")"

    from 'build/outputs'
    archiveName "StudioTest_" + version + ".zip"
    destinationDir file("build/release")

    doLast(){
        copy{
            from ("build/release/"+archiveName)
            into ("release")
        }

        if (!project.hasProperty("commitMsg")){
            ext.commitMsg = "//upload compile result"
        }
    }
}

// build script for jenkins only
task buildAll(){
    println 'start build'
}

/*task gitOpera() {
    doLast {
        def grgit = Grgit.open(dir: '.', creds: ['root', 'hbzhou0622'])
        grgit.add(patterns: ['*.zip', 'app/release'])
        grgit.add(patterns: ['version.properties', 'app'])
        grgit.commit(message: '提交版本号变化')
        grgit.push(force: true)
    }
}*/

def getGitVersion() {
    return 'git rev-parse --short HEAD'.execute().text.trim()
}

//generateZip.dependsOn build
//gitOpera.dependsOn generateZip
//buildAll.dependsOn gitOpera
generateZip.dependsOn build
buildAll.dependsOn generateZip

tasks.withType(JavaCompile) {
    compileTask -> compileTask.dependsOn ndkBuild
}

task ndkBuild(type: Exec) {
    workingDir file('src/main/jni')
    commandLine getNdkBuildCmd()
}

task cleanNative(type: Exec){
    workingDir file('src/main/jni')
    commandLine getNdkBuildCmd(), 'clean'
}

clean.dependsOn cleanNative

def getNdkDir() {
    if (System.env.ANDROID_NDK_ROOT != null)
        return System.env.ANDROID_NDK_ROOT
    Properties properties = new Properties()
    properties.load(project.rootProject.file('local.properties').newDataInputStream())
    def ndkdir = properties.getProperty('ndk.dir', null)
    if (ndkdir == null)
        throw new GradleException("NDK location not found. Define location with ndk.dir in the local.properties file or with an ANDROID_NDK_ROOT environment variable.")
    return ndkdir
}

def getNdkBuildCmd() {
    def ndkbuild = getNdkDir() + "/ndk-build"
    ndkbuild += ".cmd"
    return ndkbuild
}


dependencies {
    // 工程目录里面的libs文件夹下所有的jar包
    compile fileTree(dir: 'libs', include: ['*.jar'])
    // 网络仓库里面的工程
    //compile 'com.github.chrisbanes.photoview:library:1.2.4'
    // 本地的工程
    compile project(':PhotoView-master')
}

  邮件通知我就不发了,跟svn的大同小异,

2016.01.21

------End------

 

posted on 2016-01-21 12:56  openflight123  阅读(1470)  评论(0编辑  收藏  举报

导航