Android持续集成:Jenkins+Github+蒲公英/Fir.im+邮件通知

更新时间:2017-11-13 09:40:34点击次数:143次

文章目录

  • 持续集成

  • Jenkins

  • 蒲公英

  • Fir.im

  • Jenkins的安装

  • 初识Jenkins

    • General

    • 源码管理

    • 构建触发器

    • 构建

    • 构建后的操作

    • 开始构建

  • Fir.im上传

  • 蒲公英上传

  • 邮件通知(原生)

  • 邮件通知(python脚本)


0

持续集成

持续集成是一种软件开发实践。团队开发成员经常集成它们的工作,大多数成员每天至少集成一次,也就意味着每天可能会发生多次集成。每次集成都通过自动化的构建(包括编译,发布,自动化测试)来验证,从而尽早地发现集成错误。


持续集成的价值在于

  • 减少风险
    一天中进行多次的集成,并做了相应的测试,这样有利于检查缺陷,了解软件的健康状况

  • 减少重复过程
    节省时间、费用和工作量

  • 任何时间、任何地点生成可部署的软件
    可以经常对源代码进行一些小改动,并将这些改动和其他的代码进行集成。如果出现问题,项目成员马上就会被通知到,问题会第一时间被修复。

  • 增强项目的可见性
    持续集成让我们能够注意到趋势并进行有效的决策。如果没有真实或最新的数据提供支持,项目就会遇到麻烦,每个人都会提出他最好的猜测。


1

Jenkins

Jenkins是一个开源软件项目,旨在提供一个开放易用的软件平台,使软件的持续集成变成可能。

根据官方定义,Jenkins有以下的用途:

  • 构建项目

  • 跑测试用例检测bug

  • 静态代码检测

  • 部署

IOS中Jenkins流程


2

蒲公英

蒲公英全方位帮助开发者轻松内测应用。


3

Fir.im

fir.im为开发者提供测试应用极速发布,应用崩溃实时分析、用户反馈收集等一系列开发测试效率工具服务,帮助开发者将更多精力放在产品的开发与应用的优化上。


4

Jenkins的安装

由于需要执行Shell脚本,所以本篇文章的运行环境为Mac OS,如果你希望在linux环境下搭建持续集成环境进,同样可以按照本篇文章的流程进行部署

  • JDK安装、Android SDK安装、Gradle安装、Tomcat安装
    这些没什么好说的了吧,只要你会开发Android,这些对你来说都是小菜一碟,特别注意不要忘记对环境变量进行配置,不然后续会有问题

  • 下载war(http://mirrors.jenkins-ci.org/)包,选择最新的Release版本

  • 将war放到tomcat的webapps目录下,然后启动tomcat。启动完成之后打开localhosrt:8080/jenkins页面即可进行安装

  • 输入密码,路径已经在下方红字部分给出,直接用记事本打开复制粘贴即可

输入密码

密码


  • 选择推荐配置即可

安装

正在安装


  • 安装成功


5

初识Jenkins

  • 系统配置

    在Jenkins左侧有一下几个配置项

    这里主要提及一下的是系统管理。这里面有插件管理、用户管理、脚本管理等功能,在后续的使用过程中我们会对这里有一些操作。

    涉及到本文中Android构建的插件主要是Gradle plugin、Git plugin、SSH Credentials Plugin等,这些在安装过程中已经覆盖了

系统配置


  • 新建项目
    点击“新建”按钮并选择“构建一个自由风格的软件项目”,完了之后会进入到任务的配置界面,配置好之后任务会出现在如上图右边的任务列表中。

新建项目

新建完成


  • 任务配置
    选择新建类型之后,就会弹出任务配置页面。你随时可以通过项目中的“配置”按钮对此进行修改

全流程可配置项


General

项目的基本信息


源码管理

Jenkins支持使用版本管理工具来进行源码管理,这里我选择使用Git。在Repository URL中输入项目地址,这里我用的是我自己GitHub上的一个工程作为Demo的源码。点击Add按钮添加一下我Github的用户名及密码便于Jenkins自动去下载代码。最后选择构建的分支,我这里使用的是master分支。

源码管理

添加Github账号


构建触发器

Jenkins触发的时机配置,如果都不选,则为手动构建,需要点击“立即构建”按钮才构建。


这里简单介绍一下各个功能
Build periodically:不关心源码是否发生变化,按照一定的周期进行项目构建
Build when a change is pushed to GItHub:只要GitHub上面源码一更新就立即进行构建
Poll SCM:定时检查源码变更,如果有更新就下载最新的代码下来,然后执行构建
Build periodically和Poll SCM都支持日程表的设置,有5个参数:
第一个参数代表的是分钟 minute,取值 0~59;
第二个参数代表的是小时 hour,取值 0~23;
第三个参数代表的是天 day,取值 1~31;
第四个参数代表的是月 month,取值 1~12;
最后一个参数代表的是星期 week,取值 0~7,0 和 7 都是表示星期天。

(1) H/15    为每15分钟构建一次
(2) H H(9-16)/2   1-5 星期一到星期五每天9点到下午5点,每隔2小时构建一次
具体使用请参考Jenkins里面的说明,就是点蓝色的问号即可显示


构建

我们使用gradle进行构建工作,这个没什么好说的。命令为gradlew clean assembleRelease,打出正式版的包


构建后的操作

可以让Jenkins在构建完之后执行诸如邮件通知等功能,这个我们稍后再说
这里我仅仅设置了存根的位置


开始构建

配置完毕之后,我们需要在jenkins的workspace下找到自己的工程,把local.properties放进去,不然gradle编译的时候找不到SDK的路径。之后我们点击立即构建

构建中


各个颜色代表的意义如下:


天气的晴雨表代表了项目的质量,这也是Jenkins的一个特色。


出错之后,选择"Console Output"查看具体错误,错误都是在最底下的,一定要拉到页面最底下去查看,不然会出现误导

构建错误


构建成功,显示相应信息

构建成功

构建历史


6

Fir.im上传

打包成功了,下面就到了部署的环节了

Fir.im非常简单,因为它提供一个插件,把整个上传功能都帮你实现好了

  • 下载插件(http://7xju1s.com1.z0.glb.clouddn.com/fir-plugin-1.9.4.hpi

  • 进入"系统管理"->"管理插件"->"高级"->"上传插件"


  • 在"构建后操作"选择"Upload to fir.im",并添加api token并校验


  • 立即构建项目,成功之后
    在你的Console Output里面有如下日志

Fir.im日志


Fir.im应用列表也可以查看到相关信息

Fir.im应用列表

其余操作请参考Fir.im官网介绍(http://blog.fir.im/jenkins/


7

蒲公英上传

与Fir.im不同,它是通过shell脚本执行post上传指令的


上传App请求接口返回参数


这边怎么使用先放一放,待稍后介绍脚本如何使用时候再说


8

邮件通知(原生)

Jenkins自己也有一套邮件系统,但是我觉得这个与脚本发邮件相比,稍微略显鸡肋。为什么这么说?你想想看看,之前fir.im上传接口回调回来的数据怎样才能归档到邮件里面来呢?当然你说相关配置写死是可以实现的,这没错,但是你觉得这样好吗?

不管怎么说,如果要求没有那么高,仅仅是通知相关人员一下而已,这个还是有很大便利之处的

  • 进入"系统管理"->"系统设置"->"Extended E-mail Notification",点下"高级"

  • 再去下方邮件通知配置,一样要点"高级"

  • 最后必须设置"Jenkins Location"。上面只是配置邮件服务器地址、账号和密码,但是Jenkins不知道采用哪个邮箱去发送,系统管理员邮件地址必须与上图设置的用户保持一致。

  • 点击测试,你应该可以收到相应邮件

  • 配置"构建后操作",把接收人邮箱还有邮件相关信息都写好。这里写什么都是无所谓的,保持HTML格式就行

最终收到的效果也是很好的

Email收到的格式


9

邮件通知(python脚本)

有了脚本,就等于一切尽在我手中。我在网上找到很多关于Jenkins打包的脚本,全是IOS的相关处理,android反正我是没有找到,那么我就直接拿IOS的改改就行了。IOS的2个地址是jenkins-pgy-python

https://github.com/RunningYoung/jenkins-pgy-python)与JenkinsTemplateForApp

https://github.com/debugtalk/JenkinsTemplateForApp)。这里我就不贴代码了,我就简单说一下思路,后面我会把代码一起放出。这边结合到蒲公英的上传脚本,先将图片上传,拿到返回的json值,然后获取到git上相关commit信息,一并通过smtp邮件方法进行发送

  • 项目经理 点击这里给我发消息
  • 项目经理 点击这里给我发消息
  • 项目经理 点击这里给我发消息
  • 项目经理 点击这里给我发消息