以下是您在大多数 CI 系统中可以找到的一些功能。
环境
选择并了解系统执行工作流的硬件和软件环境非常重要。对于 Android 应用程序,重要的考虑因素包括
- 平台:Linux、Mac、Windows 及其版本。
- 可用内存:构建应用和运行模拟器会使用大量 RAM,并且通常需要调整 JVM 堆大小等参数以避免内存不足错误。
- 预安装软件:CI 系统通常提供包含大量工具的镜像,例如 Java 开发工具包 (JDK)、Android 软件开发工具包 (SDK)、构建工具、平台和模拟器。
- 运行器架构和指令集:ARM、x86。在使用模拟器时,这一点很重要。
- 环境变量:一些由 CI 系统设置(例如:
ANDROID_HOME
),您可以设置自己的变量以避免在工作流中硬编码凭据。
您还应该考虑许多其他方面,例如可用的核心数量,以及是否启用了虚拟化以运行模拟器。
日志和报告
如果某个步骤失败,CI 系统会通知您,并且通常不允许您合并更改。要找出哪里出了问题,请查看日志中的错误。
此外,构建和测试会生成报告,这些报告通常会作为该特定构建的工件存储。根据 CI 系统的不同,您可以使用插件来可视化这些报告的结果。
缓存和 CI 运行时间
CI 系统使用构建缓存来加快构建速度。最简单的形式是,它们在成功构建后保存所有 Gradle 缓存文件,并在新构建之前还原它们。这依赖于Gradle 的构建缓存功能,应在您的项目中启用。
一些提高运行时间和可靠性的方法包括
- 模块:检测哪些模块受更改影响,并仅构建和测试这些模块。
- 跳过缓存:如果构建包含开发人员修改的脚本,请忽略构建缓存。从头开始构建更安全。
- 分片测试:特别是工具化测试,将测试分片到多个设备可能会有所帮助。Android 运行器、Gradle 托管设备和 Firebase 测试实验室都支持此功能。
- 构建分片:您可以将构建分片到多个服务器实例上。
- 远程缓存:您还可以使用Gradle 的远程缓存。
重试失败的测试
不稳定性是指测试或工具间歇性失败。您应该始终尝试查找并修复导致构建和测试不稳定的问题,但其中一些问题很难重现,尤其是在运行 Instrumentation 测试时。一种常见的策略是在测试运行失败时重试,最多重试一定次数。
配置重试没有单一的方法,因为它们可能发生在多个级别。下表概述了您可能针对不稳定测试失败采取的操作
失败 |
操作 |
---|---|
模拟器无响应一秒钟,触发了超时 |
重新运行失败的测试 |
模拟器启动失败 |
重新运行整个任务 |
代码检出阶段出现连接错误 |
重新启动工作流 |
重要的是要记录并跟踪系统哪些部分不稳定,并投入保持 CI 的可靠性和快速性,而不是仅仅依赖于重试