公司其实有现有的打包平台,然而该平台承载的工作量很少,例如并未承担自动化定时构建、执行gradle命令、自动化运行测试用例等功能。
并且在构建项目方面时间较慢,且在失败状态下不能及时通知对应人员
因此从其实际运用方面,它只是一个远端打包平台,而非一个CI平台
一、全新CI平台预期承载功能
-
自动化定时构建项目
-
手动构建与定时构建的兼容
-
操作简单、易于拓展
-
界面清晰易读
-
支持gradle命令,与android开发环境完美对接
-
【之于全公司成员】
-
以自动化方式将最新的代码及时打包(尽管是debug版本的)供公司内部人员及时的查看工作进度
-
权限校验机制,不同人的具有不同的查看和打包等权限 #测试和UI再也不用找研发打包啦!#
-
-
【之于开发团队】
-
定制定时或周期性任务,自动化构建
-
以自动化方式及时反馈构建状态
-
以自动化方式告知开发者构建失败的信息提示以方便尽快修正
-
-
【之于管理者】
-
以自动化的方式将构建完成的包推送发第三方平台上
-
丰富的参数化构建过程,可以自由设定构建过程中的开发版本、渠道号、应用版本等,灵活构建应用
-
-
【之于测试】
-
以自动化的方式进行测试案例的运行,可以在每晚自动化进行测试案例的执行,以及时反馈整个应用的情况
-
-
支持Python、Shell拓展
二、什么是CI
没有CI的项目开发是在耍流氓。CI在Agile中是一项最基础的设施,它通过自动化来提供有效的反馈机制以及高效的部署,大大降低代了代码集成和项目交付的风险
CI (Continous Integration),持续集成。
Martin FLower 这样定义持续集成:持续集成是一种软件开发实践,即团队开发成员经常集成他们的工作,通常每个成员每天至少集成一次,这就意味着每天可能会发生多次集成
在现在的软件开发项目中,几乎没有项目是只有一个人在开发的。超过一个人就形成了团队,每个人同时并行开发不同模块的功能,这就涉及到代码的集成,所以代码集成是几乎所有开发团队都要面临的问题(一个人的开发项目不在本文范畴中)
每次集成都通过自动化的构建(编译,自动化测试,部署)来验证正确性,从而尽快地发现集成错误。大多数团队发现这个过程可以大大减少集成的问题,让团队能够更快的开发内聚的软件。
我们以图形的方式给出一个简单的使用场景
三、Jenkins
jenkins是一个可扩展的持续集成引擎
jenkins主要用于
-
持续、自动的构建/测试软件项目
-
监控一些定时执行的任务
Jenkins 特点:
-
Jenkins一切配置都可以在 web 界面上完成。有些配置如 MAVEN_HOME 和 Email,只需要配置一次,所有的项目就都能用。当然也可以通过修改 XML 进行配置。
-
支持 Maven 的模块 (Module),Jenkins 对 Maven 做了优化,因此它能自动识别 Module,每个 Module 可以配置成一个 job。相当灵活。
-
测试报告聚合,所有模块的测试报告都被聚合在一起,结果一目了然,使用其他 CI,这几乎是件不可能完成的任务。
-
构件指纹(artifact fingerprint),每次 build 的结果构件都被很好的自动管理,无需任何配置就可以方便的浏览下载
四、引入说明
4.1 系统环境
-
Linux PC
-
Java +Gradle环境 +Android SDK
-
Tomcat 7+
-
Jenkins(最好是war文件)
-
配置好tomcat,能启动访问,将Jenkins放到Tomcat的WebAPP下,可以通过本地访问到jenkins
4.2 Jenkins配置
4.2.1 相关插件安装
在Jenkins首页-- 系统管理 -- 插件管理 ,搜索相关插件并安装
-
- 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
4.2.2 环境变量
在Jenkins首页-- 系统管理 -- 系统管理:
配置JDK、Android SDK、Git、Gradle这些环境
4.2.3 新建一个入门级Job
对于Jenkins,每一个任务都是job,所以我们需要把自己的job映射到jenkins上
我们给出一个简单的示例,每天晚上11点自动构建一次安装包,并将失败信息通知给对应的svn提交者,相关配置如下:
- svn://200.200.107.201/moa/moa/moa1.1/Trunk/android/pocket_pro/app/src/main
Credentials 账户密码
- 构建触发器
Build periodically H 23 * * *
Poll SCM H/10 * * * *
- 构建
Invoke Gradle Script---Invoke Gradle ---- Gradle Version -----gradle2.2
Tasks clean assembleDevDebug
- 构建后操作
Archieve the artifacts
**/*.apk
Editable Email Notification
4.2.4 示例样式
五、结果
目前已初步实现基本的自动化构建过程,进一步优化和拓展有待实际运用中的结合。
更灵活定制化的自动化构建平台,作为基础性的底层设施,支持研发过程中的研发、测试、构建等诸多环节