您的位置:首页 > 其它

Gradle之持续集成 - 使用Jenkins构建Gradle项目

2018-09-17 10:05 387 查看

参考《Gradle IN Action》:持续集成(Continuous Integration,CI)是一个软件开发实践,其提倡频繁地集成代码,对于每个变化,源代码都会通过自动化构建被编译和测试,从而有效地减少集成难度,让项目中的问题今早暴露出来。Jenkins是一种开源的CI服务器。

持续集成的步骤:

提交代码->触发构建->执行构建->发送通知
①提交代码:多个开发人员在特定时间内将代码提交到VCS中。
②触发构建:CI可以每隔一段时间Pull一次代码,检查是否有变化或者通过监听VCS回调(Push)触发构建,或者干脆每隔一段时间就构建一次。
③执行构建:这里就是指Gradle构建,也可以是其它特定动作,如执行一个shell脚本或者执行一段代码。
④发送通知:构建的结果可以通过发送通知告知开发者,可以是E-mail、短信等等。

一、Jenkins 环境搭建与开启:

1、安装基本的工具:jdk,gradle,git,android sdk并配置好相关环境变量:JAVA_HOME,GRADLE_HOME,使用github仓库作为测试(实际项目中应该是项目的git仓库),以上步骤省略;
2、下载jenkins.war包,我的包地址https://github.com/ChenSWD/CopyGradleInAction/tree/master/chapter13-%E6%8C%81%E7%BB%AD%E9%9B%86%E6%88%90-Jenkins/Jenkins-Tools
(含有一个批处理文件可以直接点击使用,脚本如下):

:: e:\Jenkins替换成jenkins.war的实际目录,--httpPort=8081可以修改端口
cd /d e:\Jenkins
java -jar jenkins.war --ajp13Port=-1 --httpPort=8081

3、可以修改jenkins安装目录,默认是在c盘,通过增加环境变量JENKINS_HOME,可以将安装目录设置为该环境变量的地址。
4、运行.bat文件,也可以使用命令行:java -jar jenkins.war,启动jenkins服务,浏览器打开地址:localhost:8081,根据提示,输入密码、下载安装一些插件,必须要的插件一般有:Git plugin、Gradle Plugin 、.Git Parameter Plug-In(配置branch等)、description setter plugin、Branch API Plugin、SSH Slaves plugin,我是下载了推荐的所有插件,大概有20个左右,相关具体过程省略。

二、Jenkins配置相关环境

点击系统管理->全局工具配置:一般有如下几种配置(缺少的话是因为没有下载相关插件)

1、JDK:

2、Git:

3、Gradle:

4、配置android sdk路径:系统管理->系统设置

三、开始新建一个任务

1、点击新建任务,输入任务名称,选择“构建自由风格的软件项目”:

2、勾选参数化构建过程:
①添加选项参数:IS_JENKINS,用来在gradle构建时替换gradle.properties里定义的参数,这样可以在gradle脚本里用该参数区分当前是不是jenkins构建;

②添加选项参数:BUILD_TYPE,这个参数用来配置执行不同构建类型(是执行debug还是release构建等);

③添加Git Parameter参数:用来选择拉取git代码的分支,会自动识别git仓库的所有分支供构建的时候选择;

④在高级选项里选择使用自定义的工作空间,该路径是构建的时候,从git上拉去的项目要保存的路径,即:该项目的工作空间。

3、添加git源码仓库:

4、构建触发器,这里可以可以选择周期性的构建、手动构建还是监听push事件构建。
轮训SCM:定期检查源码更新,有更新则拉取代码重新构建,有5个参数:
第一个参数代表分钟0~59;
第二个参数代表小时0~23;
第三个参数代表天:1~31;
第四个参数代表月份1~12;
最后一个代表星期几0~7,0和7代表星期天。
每个参数用空格隔开,例如:1 1 1 1 * 代表每年1月1号1时1分构建一次,新版为了均衡负载,增加了新的参数H,代表该值是一个随机的,不在固定的时间点进行构建,利于均衡负载,
如:H 1 1 1 * 代表每年1月1号1时的某一分钟构建一次, 如H/5 * * * * 表示的就是每5分钟检查一次源码变化。下图中第一个参数更替成H就不会再有警告

5、构建,这里提供两种方式,一种是“Invoke Gradle script”,另一种是“执行Windows批处理命令”:
①选择“Invoke Gradle script”构建,Gradle Version 选择之前在系统管理 配置的本地gradle版本,Tasks:app:clean和app:assemble$(BUILD_TYPE),BUILD_TYPE 可以选择执行构建执行的Task,是构建debug 还是 release版本的包,勾选“Pass all job parameters as Project properties”,这样才能让选项参数动态替换gradle脚本中的值。

这种方式相比另一种优点是可以在执行gradle脚本时替换gradle.properties里定义的参数值,如上面的选项参数“IS_JENKINS”。但是有个很大问题,由于一些库一直下载失败,一直不能构建成功,报错:

* What went wrong:
A problem occurred configuring root project 'GradleTest'.
> Could not resolve all files for configuration ':classpath'.
> Could not download auto-value.jar (com.google.auto.value:auto-value:1.5.2)

搞了好久之后,想到为什么android studio能够构建成功呢,终于灵机一动从c盘的(因为AS构建时缓存路径一般在这):C:\Users\fg.gradle\caches\modules-2路径下面把相关缓存文件拷贝到工作路径的对应的目录下,因为jenkins构建时要把gradle依赖的相关文件下载到工作路径下,但由于网络等原因可能一直导致下载失败,拷贝已有的缓存文件是个很好的选择。

②选择“执行Windows批处理命令”构建,输入命令如下图:这里分两次执行命令,因为把clean和build放在一起会只执行gradle clean构建,不会执行gradle build构建,这些命令和在本地执行gradle命令类似,使用的是c盘路径下的缓存,并不会去下载一堆的依赖文件。

四、开始构建

经过上面的步骤之后,可以运行一次构建了:

可以看到上面参数选择都是之前配置的选项参数,点击开始构建,可以 在控制台输出中实时看到构建过程,构建结束后,会在工作目录下面生成相关apk文件。至此,使用jenkins构建gradle项目的基本使用就结束了。

阅读更多
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: