基于Jenkins实现Android项目的持续集成

背景

伴随着版本的迭代,工程的复杂度也逐渐增加,提测阶段不断被要求打新包的情况都会遇到,打算思路不说也会影响办公效率,那么自动化的践行就日益强烈。
移动端应用的自动化构建具体说来可以是这样:使用持续集成(CI)系统jenkins,自动检测并拉取Git上的最新代码,根据参数化配置自动打包成不同的渠道apk,并自动上传到内测分发平台或者发送推送邮件给相应人员。

环境搭建

以mac为例,其他系统类似

下载分为两个版本:Long-term Support,Weekly 。类似于一个稳定版一个开发版,自行选择,功能上几乎没区别。根据对应系统下载安装包或者直接下载.war文件,安装包按顺序安装完会自动占用8080端口,.war文件下载完放置到tomcat的webapp目录下或者apache的webServer目录下就可以直接使用,浏览器访问http://localhost:8080/jenkins/ 即可。

  • tomcat/apache

  • JDK 这里多说两句,Jenkins不支持java8以上,所以一定要保证安装了8及以下的JDK,好在mac支持多个JDK环境,可以参考这里

  • GIT

  • Gradle

插件

Jenkins提供了非常多的插件,访问 http://localhost:8080/ 或者http://localhost:8080/jenkins/, 可进入jenkins配置页面,大概长这样。

基于Jenkins实现Android项目的持续集成

选择按照推荐安装或者自己选择插件安装都可以,下载安装的速度跟网络环境有关(需要v*n*),可能会耗时较长。这里必须安装的有以下三个:

Git插件(Git plugin)

SSH插件(SSH plugin)

Gradle插件(Gradle Plugin)

配置

插件安装完毕就可以进行Jenkins的配置了,左侧系统管理-全局工程配置(Global Tool Configuration)配置JDK/Git/Gradle,如图:

基于Jenkins实现Android项目的持续集成

基于Jenkins实现Android项目的持续集成

Gradle的安装目录,可以是Android Studio默认下载的Gradle目录,在用户目录的.gradle\wrapper\dists文件夹下。个人觉得不配置也可以,因为现在git项目一般都会保留gradle wrapper文件夹,构建的时候使用项目中的也可以,这个后面再说。

然后去 系统设置中配置环境变量

基于Jenkins实现Android项目的持续集成

自动化构建

1.创建项目

点击右侧 新建任务,输入任务名字选择 构建一个*风格的软件项目基于Jenkins实现Android项目的持续集成

2.配置项目

点击右侧配置进入配置页面,选择**源码管理**tab填入仓库地址url并点击add添加认证需要的ssh或者用户名密码(类型可以变更),分支可以填入多个,优先按上面的拉取代码。

基于Jenkins实现Android项目的持续集成

基于Jenkins实现Android项目的持续集成

然后点击构建**tab,点击添加构建步骤,选择**Invoke Gradle Script

Invoke Gradle script可以选择之前配置的全局gradle也可以使用项目中的gradle wrapper(如果项目有上传的化),task是要执行的gradle命令不多介绍,第二个红框一定勾选,只有勾选该选项,项目中gradle.properties的参数才能被Jenkins修改,这部分在参数化构建中会用到,后面再说。

基于Jenkins实现Android项目的持续集成

最基本的配置就完成了,如果配置的没出差错,点击保存之后就可以返回上一级页面立即构建项目了。

点击左侧菜单栏的立即构建,开始构建项目,这时候Build History版块会出现构建任务列表,点击进入可以查看构建详情页,如图
基于Jenkins实现Android项目的持续集成
点击Console Output(控制台输出)来查看构建输出的日志,,日志最后输出Finished: SUCCESS即构建成功。
成功之后,返回项目地址就可以点击工作空间,在app的build目录下面查看apk生成情况。

3.参数化构建

在打包的时候,我们可能不只是想打一个版本的包,我们想通过配置一下参数,来满足一些需求,比如根据渠道打不同的包、根据分支打不同的包等,下面就来举例说一下Jenkins参数化构建。

在我们刚刚建立的Jenkins项目主页选择配置,进入配置页,在General tab将参数化构建过程选中,如图:

基于Jenkins实现Android项目的持续集成

以我的测试例子作为参考,jenkins提供了多种参数类型,大家可以根据需要自己摸索

基于Jenkins实现Android项目的持续集成

上面提到构建tab下的一个选项必须勾选,就是在这里用到。

再次回到项目主页,原来的立即构建已经变成了Build with Parameters(参数化构建),点击之后出现我们设置的参数。如图:

基于Jenkins实现Android项目的持续集成

4.构建触发器

如果需要Jenkins自动执行构建怎么操作呢?

这就需要配置构建触发策略,即构建触发器

触发器支持多种类型,常用的有:

  • 定时进行构建(Build periodically)
  • 根据提交进行构建(Build when a change is pushed to GitHub)
  • 定期检测代码更新,如有更新则进行构建(Poll SCM)

构建触发器的选择为复合选项,若选择多种类型,则任一类型满足构建条件时就会执行构建工作。如果所有类型都不选择,则该不执行自动构建。

5.构建后处理

构建完成后如果需要自动推送邮件或者上传至内测分发平台,则需要在这块进行设置,这块在配置的**构建后操作**tab中。这些操作可能需要借助一些已有的Jenkins插件来辅助完成,这里具体不再介绍。

如果只是想构建完成展示构建成果的话,可以这样操作

选择增加构建后操作步骤->Archive the artifacts来进行配置: 基于Jenkins实现Android项目的持续集成

6.删除旧的构建

Jenkins默认会保留所有构建,可以在构建历史里查看,当构建次数多了之后,硬盘就会慢慢被塞满,这时候我们可以删除一些比较旧的构建,构建的目录在/var/lib/jenkins/jobs/构建项目名称/builds/构建序号,你可以手动进行删除,也可以设置自动删除。

自动删除可以在项目的配置-General tab下勾选丢弃旧的构建,如图设置为只保留最近的5次构建,还可以按天保留

基于Jenkins实现Android项目的持续集成