阅读 3164

基于Jenkins的Andriod持续集成之路

下面将会向你展现一件充满魔法与奇迹的事情,希望你耐心看到最后

如果你正在经历这样的烦恼:

  • 日复日一日地被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之后,要做的事情主要包括:

  1. 安装所需要的插件
  2. 配置所需要的环境参数
  3. 配置项目

插件安装

插件安装在前面提及过,安装插件主要有两种方式。

  • 一种是在"系统管理->插件管理->可选插件"目录下选择需要的插件安装。

  • 一种是在"系统管理->插件管理->高级"目录下选择安装本地下载的

环境参数配置

配置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测试->打包->生成测试报告->上传安装包->通知团队成员"(并且这仅仅只是非常基本的事情)。

并没有很神奇的魔法,只要动起手来,很快你也有自己的一个打包机器人,开始做各种酷炫的事情了。

写在后面

因为上面的内容是我重新弄的一个,可能跟我之前做的时候有一些步骤细节我没有在上面提及,如果你对持续集成感兴趣欢迎评论一起探讨。如果你喜欢的话欢迎点赞收藏。也欢迎大家关注我。最后,感谢你宝贵的时间阅读这篇文章。

关注下面的标签,发现更多相似文章
评论