CI 功能

以下是您在大多数 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 Test Lab 的支持。
  • 分片构建:您可以将构建分片到多个服务器实例上。
  • 远程缓存:您还可以使用 Gradle 的远程缓存

重试失败的测试

不稳定是指间歇性失败的测试或工具。您应该始终尝试查找并修复导致不稳定构建和测试的问题,但其中有些问题难以重现,尤其是在运行插桩测试时。一种常见策略是,每当测试运行失败时,都重试,直到达到最大重试次数。

重试的配置方式并非单一,因为它们可以在多个级别上发生。下表概述了您针对不稳定测试失败可能采取的操作:

失败

操作

模拟器一秒钟无响应,导致超时

重新运行失败的测试

模拟器启动失败

重新运行整个任务

代码签出阶段出现连接错误

重新启动工作流

记录和跟踪系统哪些部分不稳定,并投入精力保持 CI 可靠和快速,仅依赖重试,这一点很重要