热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

基于Jenkins的Andriod持续集成之路

下面将会向你展现一件充满魔法与奇迹的事情,希望你耐心看到最后如果你正在经历这样的烦恼:日复日一日地被leader或者qa人员催要手机安装包单调乏味的手动

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

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

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

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

写在后面

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



推荐阅读
  • Jenkins的分布式构建,在Jenkins的配置中叫做节点,分布式构建能够让同一套代码或项目在不同的环境(如:Windows和Linux系统)中编译、部署等。将jenkins项目 ... [详细]
  • imx6ull开发板驱动MT7601U无线网卡的方法和步骤详解
    本文详细介绍了在imx6ull开发板上驱动MT7601U无线网卡的方法和步骤。首先介绍了开发环境和硬件平台,然后说明了MT7601U驱动已经集成在linux内核的linux-4.x.x/drivers/net/wireless/mediatek/mt7601u文件中。接着介绍了移植mt7601u驱动的过程,包括编译内核和配置设备驱动。最后,列举了关键词和相关信息供读者参考。 ... [详细]
  • 本文介绍了在Windows环境下如何配置php+apache环境,包括下载php7和apache2.4、安装vc2015运行时环境、启动php7和apache2.4等步骤。希望对需要搭建php7环境的读者有一定的参考价值。摘要长度为169字。 ... [详细]
  • Android源码深入理解JNI技术的概述和应用
    本文介绍了Android源码中的JNI技术,包括概述和应用。JNI是Java Native Interface的缩写,是一种技术,可以实现Java程序调用Native语言写的函数,以及Native程序调用Java层的函数。在Android平台上,JNI充当了连接Java世界和Native世界的桥梁。本文通过分析Android源码中的相关文件和位置,深入探讨了JNI技术在Android开发中的重要性和应用场景。 ... [详细]
  • 本文介绍了在CentOS上安装Python2.7.2的详细步骤,包括下载、解压、编译和安装等操作。同时提供了一些注意事项,以及测试安装是否成功的方法。 ... [详细]
  • Maven入门、什么是Maven、如何使用Maven、Maven的项目结构、简单的Mavenjava项目、Maven常用命令、Maven项目之间的引用、Maven依赖的传递、可选、排除day01
    目录第一节Maven入门1.1什么是Maven1.2如何使用Maven第一步:下载Maven第二步:配置Maven的环境变量第三步:了解什 ... [详细]
  • 1jdk去网站下载,然后拷贝到linux上;或直接wgethttp:download.oracle.comotn-pubjavajdk8u181-b1 ... [详细]
  • SVN 功能说明(简版)
    Subversion(SVN)是什么?SVN是一种版本管理系统,是开源软件的基石。即使在沟通充分的情况下,多人维护同一份源代码的一定也会 ... [详细]
  • Jenkins教程:使用Jenkins进行持续集成
    【注】本文译自:https:www.edureka.coblogjenkins-tutorial本文将重点介绍Jenkins架构和Jenkins构建管道,并向您展示如何在Jenki ... [详细]
  • SVN自动化正文共:5007 字预计阅读时间: 13 分钟平时自己多用Git来做版本控制,但很多公司内部依旧使用SVN,核心原因其实就是SVN够用了,懒得换,虽然自己用git,但对 ... [详细]
  • 第九章  Spring Cloud Config
    9-1.SpringCloudConfig是什么?​ 在分布式的系统中,尤其是当我们的分布式项目越来越多,每个项目都有自己的配置文件&# ... [详细]
  • baresip android编译、运行教程1语音通话
    本文介绍了如何在安卓平台上编译和运行baresip android,包括下载相关的sdk和ndk,修改ndk路径和输出目录,以及创建一个c++的安卓工程并将目录考到cpp下。详细步骤可参考给出的链接和文档。 ... [详细]
  • 本文详细介绍了Linux中进程控制块PCBtask_struct结构体的结构和作用,包括进程状态、进程号、待处理信号、进程地址空间、调度标志、锁深度、基本时间片、调度策略以及内存管理信息等方面的内容。阅读本文可以更加深入地了解Linux进程管理的原理和机制。 ... [详细]
  • 本文介绍了在Linux下安装Perl的步骤,并提供了一个简单的Perl程序示例。同时,还展示了运行该程序的结果。 ... [详细]
  • 20209测试通过:eclipse安装svn插件
    网址不能用了,新的办法参考:https:quantum6.blog.csdn.netarticledetails117250800下载了最新的ecli ... [详细]
author-avatar
不会做饭的我
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有