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) 编辑 收藏 举报