下面将会向你展现一件充满魔法与奇迹的事情,希望你耐心看到最后
如果你正在经历这样的烦恼:
- 日复日一日地被leader或者qa人员催要手机安装包
- 单调乏味的手动执行着一个又一个测试用例
- 因为打包、测试等带来的各种效率低下问题
那么你是时候体验一下android的持续集成了。如果你还不知道什么是持续集成,不知道持续集成能为你干什么,不知道怎么完美的搭建一个持续集成的平台,那么下面跟着我开始走上android持续集成之路吧。
持续集成是一种软件开发实践,对于提高软件开发效率并保障软件开发质量提供了理论基础。Jenkins 是一个开源软件项目,旨在提供一个开放易用的软件平台,使持续集成变成可能。
什么是持续集成(Continuous integration)
持续集成是一种软件开发实践,它倡导团队开发成员必须经常集成他们的工作,甚至每天都可能发生多次集成。而每次的集成都是通过自动化的构建来验证,包括自动编译、发布和测试,从而尽快地发现集成错误,让团队能够更快的开发内聚的软件。
持续集成最核心的价值就是自动化,自动化完成包括合并代码、打包、测试和通知分发的一系列软件工程开始的操作。
Jenkins 简介
Jenkins 是一个开源项目,提供了一种易于使用的持续集成系统,使开发者从繁杂的集成中解脱出来,专注于更为重要的业务逻辑实现上。同时 Jenkins 能实施监控集成中存在的错误,提供详细的日志文件和提醒功能,还能用图表的形式形象地展示项目构建的趋势和稳定性。
事实上,持续集成的工具并不只是Jenkins这一个,除此之外还有比如travis ci。但是Jenkins由于支持的代码托管方式多,插件多而且各种教程都相对比较成熟,因此很多团队和公司都是使用Jenkins作为持续集成的工具。接下来主要谈一下基于Jenkins的Andriod持续集成。
Jenkins安装
由于我使用的是Mac,包括安装在内的下列说明都是以Mac作为示例(虽然使用Mac示例,但是实际上windows和Linux这些都是支持的,并且使用方式都类似)。安装Jenkins,Mac上有两种途径:
- 在Jenkins官网下载安装包(可以选择war包,这个需要将war包配置到tomcat服务器下,也可以选择Mac系统的pkg安装包,简单快捷)
- 通过 brew 安装 “brew install jenkins”
上面两种方式我都试过,其实从简单快捷上我更加推荐使用pkg安装包进行安装(如果习惯使用brew的同学请忽略这个)。但是在使用pkg包安装的时候建议自定义安装,如下图所示:
这样子安装之后,可以避免因为Jenkins安装在共享目录而缺乏对当前用户的目录的读写权限,造成各种惨痛的bug。(当时自己就是因为这个原因一直找不到android sdk路径)
上面的安装步骤结束之后,就可以在浏览器上访问我们的Jenkins了,默认端口号就是8080.所以我们只需要在浏览器输入 "http://localhost:8080" 就可以访问了。
插件安装
在启动Jenkins之后会提示安装插件,我们可以选择安装默认的推荐插件,也可以自主选择。在刚开始的时候为了方便可以直接安装推荐的插件。等到整个Jenkins初始化成功之后再根据自己的需要选择适合的插件进行安装。这里有一些插件是推荐安装的:
代码托管管理相关:
- git/svn
- 代码托管仓库相关的插件,比如GitHub、bitbucket、gitlab等等
构建相关的插件
- gradle/ant/maven
- Dynamic Parameter Plug-in:支持动态参数构建插件
- Extended Choice Parameter Plug-In:支持参数化选择配置的插件
android相关的插件
- Android Emulator Plugin
- Android Lint Plugin
打包通知相关插件
- Slack Upload Plugin
- Slack Notification Plugin:结合slack的使用
- email拓展的插件
插件的安装可以在进入Jenkins控制台之后系统管理->插件管理进行安装,如果在安装的时候出现问题的话我么也可以把插件文件下载下来,再从本地进行安装。
jenkins插件下载地址
Jenkins使用
上面就是Jenkins初始化之后的控制台页面。通常进入Jenkins之后,要做的事情主要包括:
- 安装所需要的插件
- 配置所需要的环境参数
- 配置项目
插件安装
插件安装在前面提及过,安装插件主要有两种方式。
- 一种是在"系统管理->插件管理->可选插件"目录下选择需要的插件安装。
- 一种是在"系统管理->插件管理->高级"目录下选择安装本地下载的
环境参数配置
配置jdk
在"系统管理->Global Tool Configuration"路径下面,我们可以配置我们的jdk,如下图所示:
我们可以选择安装或者配置本地的jdk的路径
配置gradle
跟配置jdk一样,gradle的配置也是在"系统管理->Global Tool Configuration"路径下面,如下图所示:
配置android sdk路径
在"系统管理->系统设置->全局属性"里面设置android sdk的路径,如下图所示:
配置项目
开始创建一个任务
设置参数化构建
jenkins参数话构建跟我们在android studio中设定buildtype、productflavor等等相类似,只是我们可以设置更多的参数类型。并且这里定义的所有参数类型可以在下面的构建中的脚本直接使用。
设置代码源跟踪和管理
这里要注意的是,当我们绑定到类似gitlab、github、bitbucket之类的代码仓库的时候,访问这些仓库是需要权限的,也就是说需要绑定ssh key,这跟我们将代码clone到本地进行操作的道理是一样的。添加认证的操作如下:
代码构建
代码构建建议使用gradle脚本,因为这个我们最熟悉,也最简单。在build的过程中,我们可以执行我们的测试脚本,比如单元测试、ui测试之类的;也可以通过build生成对应的android包之类的。在这里定义的脚本能够访问我们在前面设置的构建参数。如下图所示
上面的配置相当于执行脚本"./gradlew spoondebug"(如果我们在打包的时候选择的是构建类型是debug类型的话)。里面的spoon是square公司推出的一个开源工具,支持和espresso的ui测试结合,并发的将测试用例分发到电脑连接的手机。感兴趣的可以去看一下spoon的使用方法,并且这个工具有gradle的插件。
上面的等同于我们在命令行中执行"./graldew assembledebug",这个会进行编译打包操作。
构建后通知操作
团队合作,我们可以在成功打包构建之后,将单元测试结果、打包结果通过诸如邮件、slack等渠道发送给团队每个成员,让每个成员掌握项目的构建情况。
这里推荐使用国外的一个slack的工具,功能非常全面,不仅支持上传应用文件、聊天通知,而且还提供机器人api,自己定义机器人做一些酷炫的事情。比如我利用slack实现的一个打包机器人。
大概的流程就跟上面说的一样。因为Jenkins有非常丰富的插件,基本上面的每一个环节都有丰富的插件可以帮助我们完善构建过程,大家有兴趣的可以在Google上面搜索,也可以在底下评论大家一起探讨。基本上你能想到的事情,Jenkins都能自动化的帮你完成。
就像上面的最后一张截图那样,当你把Jenkins安装配置好之后,你就能够随时随地的使用你的手机向机器人发送一条指令,然后接下来神奇的事情发生了,Jenkins服务器就会开始"拉取远程代码更新->设定打包参数->参数化构建->单元测试->ui测试->打包->生成测试报告->上传安装包->通知团队成员"(并且这仅仅只是非常基本的事情)。
并没有很神奇的魔法,只要动起手来,很快你也有自己的一个打包机器人,开始做各种酷炫的事情了。
写在后面
因为上面的内容是我重新弄的一个,可能跟我之前做的时候有一些步骤细节我没有在上面提及,如果你对持续集成感兴趣欢迎评论一起探讨。如果你喜欢的话欢迎点赞收藏。也欢迎大家关注我。最后,感谢你宝贵的时间阅读这篇文章。