Android Jenkins+Git+Gradle持续集成

首先到Jenkins的官网下载https://jenkins.io,安装jenkins不再赘述
然后是插件安装如下
注意:列表中为主要插件,而Jenkins的插件是有依赖关系的,安装一个插件可能要先安装它依赖的插件,否则会安装失败。在可选插件勾选列表中的插件即可,依赖插件会自动下载,是不是很棒。

Git plugin
Gradle Plugin
Email Extension Plugin
description setter plugin
build-name-setter
user build vars plugin
Post-Build Script Plug-in
Branch API Plugin
SSH plugin
Scriptler
Dynamic Parameter Plug-in
Git Parameter Plug-In
在线没有的插件可以去找离线包

接着安装打包需要的工具 安卓 sdk gradle git
1.下载Android SDK
http://tools.android-studio.org/index.php/sdk/ 我下载的是:android-sdk_r24.4.1-linux.tgz

2. 解压Android SDK
将android-sdk_r24.4.1-linux.tgz文件复制到Linux 文件系统中的某个目录,我的是目录是/usr/local/
执行命令解压:
tar -zvxf android-sdk_r24.4.1-linux.tgz
3.配置环境变量
在文件/etc/profile末端添加如下两行:
export ANDROID_HOME=/usr/local/android-sdk-linux
export PATH=$ANDROID_HOME/tools:$PATH
android-sdk-linux是你解压后的文件名,tools一定要这样写,是里面文件夹的名称

执行命令文件立马生效
source /etc/profile
4.安装所有包
android update sdk --no-ui
或者查看序列号
android list sdk --all
结果
1- Android SDK Tools, revision 24.1.2
2- Android SDK Platform-tools, revision 22
3- Android SDK Build-tools, revision 22.0.1
4- Android SDK Build-tools, revision 22 (Obsolete)
5- Android SDK Build-tools, revision 21.1.2
6- Android SDK Build-tools, revision 21.1.1 (Obsolete)
7- Android SDK Build-tools, revision 21.1 (Obsolete)
8- Android SDK Build-tools, revision 21.0.2 (Obsolete)
9- Android SDK Build-tools, revision 21.0.1 (Obsolete)
10- Android SDK Build-tools, revision 21 (Obsolete)
11- Android SDK Build-tools, revision 20
12- Android SDK Build-tools, revision 19.1
13- Android SDK Build-tools, revision 19.0.3 (Obsolete)
14- Android SDK Build-tools, revision 19.0.2 (Obsolete)
15- Android SDK Build-tools, revision 19.0.1 (Obsolete)
16- Android SDK Build-tools, revision 19 (Obsolete)
17- Android SDK Build-tools, revision 18.1.1 (Obsolete)
18- Android SDK Build-tools, revision 18.1 (Obsolete)
19- Android SDK Build-tools, revision 18.0.1 (Obsolete)
20- Android SDK Build-tools, revision 17 (Obsolete)
21- Documentation for Android SDK, API 22, revision 1
22- SDK Platform Android 5.1.1, API 22, revision 2
23- SDK Platform Android 5.0.1, API 21, revision 2
24- SDK Platform Android 4.4W.2, API 20, revision 2
25- SDK Platform Android 4.4.2, API 19, revision 4
26- SDK Platform Android 4.3.1, API 18, revision 3
27- SDK Platform Android 4.2.2, API 17, revision 3
按序列号安装

android update sdk -u --all --filter 1,2,3,5,11,12,22,23,24,25,26,27,28,29,88,89
后面如果打包报错再来按序号安装所需版本

gradle安装及使用
到官网下载 https://gradle.org/install/
2、解压安装包到目录

/root/A
3、打开环境文件

sudo vim /etc/profile
4、写入环境变量:

export GRADLE_HOME=/root/A/gradle-2.0
export PATH=$GRADLE_HOME/bin:$PATH
5、环境变量生效

source /etc/profile
6、检查结果

gradle -v
出现版本信息即为正确
Gradel的使用:
查看当前工程支持的操作任务

gradle tasks
清理工程

gradle clean
编译项目debug版本 ,并输出到output目录

gradle assembleDebug
编译项目release版本 ,并输出到output目录

gradle assembleRelease
代码检查及测试

gradle check
编译项目并执行检查及测试,即assemble + check

gradle build

然后在jenkins上配置工具的路径
1 设置全局环境变量

主要有三个全局环境变量,JAVA_HOME,ANDROID_HOME,GRADLE_HOME

点击系统管理-系统设置,找到全局属性,勾选enviroment variables,分别添加这三个环境变量。主要添加变量路径要和你系统的保持一致。



然后是 工具路径 点击系统管理-Global tool configuration



最后开始打包
打包
1.创建项目
距离开始打包又近了一步,接下来就开始创建新项目了,点击首页的新建,进入下图界面

 

给自己的项目起个名字,然后选择构建一个自由风格的软件项目,点击OK按钮,进入项目的配置界面。

2.项目配置
直接选择源码管理tab或者向下滚动找到源码管理,如图;

选中Git选项,会出现上图的界面,配置Git项目的URL,我测试用的是Github项目,并且传输协议选择的是HTTP,需要选择Credentials选项,选择通行证,第一次需要点击Add添加通行证,如图:

Kind种类选择默认的Username with password,然后在Username和Pasword处分别输入Git账户的用户名和密码,然后滚动到下方点击Add,然后在Credentials中选择我们刚才添加的通行证。
接着滚动到构建Tab,点击添加构建步骤,然后选择Invoke Gradle script,如图:

然后配置构建时的Gradle版本,和需要执行的任务,如图:

这个Tasks是先clean工程,然后打包所有渠道的Release版本,这是Gradle的命令,不多说了。然后点击保存按钮,马上就可以打包了。
3.开始构建
点击左侧菜单栏的立即构建,开始构建项目,这时候Build History版块会出现构建任务列表,点击进入可以查看构建详情页

又很多菜单可以选择来查看状态,点击Console Output来查看构建输出的日志,所有的信息都会显示,日志最后输出Finished: SUCCESS即构建成功。

成功之后,返回项目地址就可以点击工作空间,在app的build目录下面查看apk生成情况。

以上就是Jenkins打包最简单的配置,我知道大家想要的不止这些,更精彩的还在后面。

定制想要的功能
1.参数化构建
在我们打包的时候,我们大多时候不想只是简简单单打一个版本的包,我们想通过配置一下参数,来满足一些需求,比如根据渠道打不同版本的包、根据Tag打不同的包等,下面就来说一下Jenkins参数化构建。

在我们项目中需要配置的选项有:版本(Release 或 Debug),版本号,渠道包,根据Tag打包。另外我们还需要加上打包途径,AS打包还是Jenkins打的包,还要加一个时间戳。所有的参数列出来了,下面就配置Jenkins的参数化构建吧~

在Jenkins项目主页选择配置,进入配置页,在General tab将参数化构建过程选中,如图:

接下来就可以添加参数了,下面我先列出参数表格:

参数名 参数类型 参数值列表
BUILD_TYPE Choice Release or Debug
IS_JENKINS Choice true
PRODUCT_FLAVORS Choice Xiaomi 、Wandoujia等
BUILD_TIME Dynamic Parameter 2016-12-21-11-11
APP_VERSION Choice 1.0.0、1.0.1等
GIT_TAG Git Parameter tag1.0.0等
下面直接放我的配置截图:

配置完参数还不算完,我们要在下方构建时候引用,首先找到构建标签处,将Tasks属性值修改为:
clean assemble${PRODUCT_FLAVORS}${BUILD_TYPE} --stacktrace --debug
其中${PRODUCT_FLAVORS}和&{BUILD_TYPE}分别对应上面的参数名。配置如图:

看了图大家肯定留意到了红色框内的选项而且很好奇吧,这个选项是APP_VERSION、IS_JENKINS、BUILD_TIME需要用到的,因为这三个参数需要注入到Android项目中的配置一样,而红色框中的这个选项可以帮我们侵入到gradle.properties文件中替换值,并且build.gradle文件能够直接引用gradle.properties文件中的属性,所以起到了侵入的效果。下面分别是我的gradle.properties和主项目的build.gradle文件全代码:

//gradle.properties


#sec:decoupled_projects
#org.gradle.parallel=true
APP_VERSION=1.0.1
IS_JENKINS=true
BUILD_TIME=''

//build.gradle

apply plugin: 'com.android.application'
def getDate() { 
def date = new Date() 
def formattedDate = date.format('yyyy-MM-dd-HH-mm') 
return formattedDate
}
def verCode = 14
android { 
compileSdkVersion 25 
buildToolsVersion "25.0.0" 
defaultConfig { 
applicationId "com.zyyoona7.autobuildtest" 
minSdkVersion 15 
targetSdkVersion 23 
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" 
multiDexEnabled true 
versionCode verCode 
versionName APP_VERSION 
} 
signingConfigs { 
signingConfig { 
//由于本地打包使用的是本机上的KeyStore 
//而Jenkins打包用的是服务器上的KeyStore 
//两个路径不一样 
if("true".equals(IS_JENKINS)){ 
storeFile file("服务器上KeyStore的路径") 
}else { 
storeFile file(STORE_FILE_PATH) 
} 
keyAlias KEY_ALIAS 
keyPassword KEY_PASSWORD 
storePassword STORE_FILE_PASSWORD 
} 
} 
buildTypes { 
release { 
minifyEnabled true 
zipAlignEnabled true 
shrinkResources true 
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' 
signingConfig signingConfigs.signingConfig 
} 
debug { } 
} 
dexOptions { 
javaMaxHeapSize "2g" 
} 
//渠道Flavors 
productFlavors { 
wandoujia { 
manifestPlaceholders = [UMENG_CHANNEL_VALUE: "wandoujia"] 
} 
xiaomi { 
manifestPlaceholders = [UMENG_CHANNEL_VALUE: "xiaomi"] 
} 
} 
//修改生成的apk名字及输出文件夹 
applicationVariants.all { variant -> 
variant.outputs.each { output -> 
//新名字 
def newName 
//时间戳 
def timeNow 
//输出文件夹 
def outDirectory 
//是否为Jenkins打包,输出路径不同 
if ("true".equals(IS_JENKINS)) { 
//Jenkins打包输出到服务器路径 
timeNow = BUILD_TIME 
//BUILD_PATH为服务器输出路径 
outDirectory = BUILD_PATH 
//AutoBuildTest-v1.0.1-xiaomi-release.apk 
newName = 'AutoBuildTest-v' + APP_VERSION + '-' + variant.productFlavors[0].name + '-' + variant.buildType.name + '.apk' 
} else { 
//本机打包输出在本机路径 
timeNow = getDate() 
outDirectory = output.outputFile.getParent() 
if ('debug'.equals(variant.buildType.name)) { 
newName = "AutoBuildTest-v${APP_VERSION}-debug.apk" 
} else { 
//AutoBuildTest-v1.0.1-xiaomi-release.apk 
newName = 'AutoBuildTest-v' + APP_VERSION + '-' + variant.productFlavors[0].name + '-' + variant.buildType.name + '.apk' 
} 
} 
output.outputFile = new File(outDirectory+'/'+timeNow, newName) 
} 
}
}

dependencies { 
compile fileTree(dir: 'libs', include: ['*.jar']) 
androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', { 
exclude group: 'com.android.support', module: 'support-annotations' 
}) 
compile 'com.android.support:appcompat-v7:25.0.0' 
testCompile 'junit:junit:4.12'
}

  

这样在Jenkins打包的时候上面三个参数就会随着选择变化而变化了。

GIT_TAG参数使用配置,只需在源码管理处的Branch引用改为$GIT_TAG引用参数名,如图:

参数配置完毕,看一下主页面的效果吧,现在立即构建选项变成了_ Build with Parameters_,完成图:

提示:

如果选中了GIT_TAG中的任意版本都无法取消选中,只能刷新;
构建后操作 

将apk放在nginx的下载目录下nginx 即开启 autoindex on 即可

jenkins配置如下

测试人员即可从网址下下载所需apk了

如果没有服务器的 给大家福利阿里云的优惠券

https://promotion.aliyun.com/ntms/yunparter/invite.html?userCode=twka3s4r

猜你喜欢

转载自www.cnblogs.com/jinbiaof/p/9626368.html