DevOps 是一个众所周知的开发方法,其主要目的是自动化软件交付。事实上,DevOps 的目标是不断的测试,代码质量,功能开发,更容易维护版本。因此,DevOps 的一个最终目标是为开发者进行快速,可信赖和自动化发布提供指导,理想化状态是在这个过程中不牵涉任何人工劳动。这就是所谓的持续交付。我写这篇文章来证明,我们现在能在 Android 平台上达成这样的目标,同时和大家分享一下我的想法和听取大家的反馈。
持续集成为出发点
想要达到持续交付,持续集成必须是强制的。在安卓平台上的持续集成已经有一段时间了,为了更清楚的去了解,我们先说一下它的优势。
安卓平台必须采用持续集成方法,是的我说过。确实,持续集成有一些在构建 Android App过程中无法发忽略的好处。在我看来,它的优势在于:
自动化构建:不再只是在我的机器,而是在所有的环境。
早失败:一旦代码提交之后就马上构建,这样就保证错误能被及早的发现。
构建测试:保证每一个测试用例都能正常运行。
不断打包:防止打包过程中的人为错误。
快速发布:既然我们对于每一次构建都有信心,那么发布就变得简单了
增加信心:最后,我们相信我们的代码,我们的过程,我们减少不良的惊喜。
一个典型的持续集成过程
首先,我们需要一个集成服务器像Jenkins 或 Travis 。下面的工作是我的标准配置:
启动一个监视代码推送到我们的代码仓库(Jenkins or Travis)完成事件的任务。该任务监视代码的 dev 分支去自动的编译、单元测试、打包或者 debug APK .
当上面的任务完成之后,另外一个任务就要被启动了。这个任务主要用来跑集成测试(通过 Espresso 或者 Robotium)。在这个过程中,通过模拟用户场景和检查渲染的图形内容的方式来保证最终的用户体验。
另外一个任务就是一个每天晚上都会运行的执行代码质量扫描(例如 Sonarqube )的任务。
最后还有一个任务用来检测一旦代码仓库的 master/release 分支有更新就去构建发布的APK包。
看看吧,正如你看见的,这个过程很简单并且保证能达成我开始所说的优势。
测试是关键
我曾经写过一篇关于测试的文章(testing on Android)。测试是如此的重要因为它是能够保证App按照我们所设定的那样去工作的唯一工具。写单元测试有很多工具和方法,请明智的去选择。
此外,确认一下你要在你的应用程序集成的库。事实上,当你使用的库有一个良好的单元测试覆盖率的时候,就更容易测试您的App。一些被认为恰当测试的并且用测试驱动他们的开发的类库(例如 IMO, OkHttp and Retrofit )。很可能,你将能够在使用它的时候来测试它。
最后,像 Dagger 库可以帮助你提高可测试性。事实上,它会迫使你遵循单一职责原则和正确分开你的代码,从而更容易测试。
一旦你有一个强大的持续集成,让我们来看看如何提高水平。
持续交付: Level++
举例来说,在 Captain Train。我们发布每6周一次,我们都非常小心了。 目前每次发布都要做:
* 我们有一个测试阶段
* 我们支持 4 个区域设置。
* 我们支持 3 种类型的设备(phone, 7 and 9 inches tablets)。 <