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 测试实验室都支持此功能。
  • 分片构建:您可以跨多个服务器实例分片构建。
  • 远程缓存:您还可以使用Gradle 的远程缓存

重试失败的测试

不稳定性是指间歇性失败的测试或工具。您应始终尝试查找并修复导致构建和测试不稳定的问题,但其中一些问题很难重现,尤其是在运行检测测试时。一种常见的策略是在测试运行失败时重试,最多重试一定次数。

没有一种方法可以配置重试,因为它们可以在多个级别发生。下表概述了您可能在响应不稳定测试失败时采取的操作

失败

操作

模拟器无响应持续一秒,触发超时

重新运行失败的测试

模拟器启动失败

重新运行整个任务

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

重启工作流

记录并跟踪系统中哪些部分不稳定非常重要,并投入精力保持 CI 的可靠性和速度,仅依赖重试