CI 功能

以下是大多数 CI 系统中提供的一些功能。

环境

选择并了解系统执行工作流的硬件和软件环境非常重要。Android 应用的重要注意事项包括:

  • 平台:Linux、Mac、Windows 及其版本。
  • 可用内存:构建应用和正在运行的模拟器可能会占用大量 RAM,并且通常有必要调整 JVM 的堆大小等参数,以避免出现内存不足错误。
  • 预安装软件:CI 系统通常会提供包含大量现有工具的映像,例如 Java 开发套件 (JDK)、Android 软件开发套件 (SDK)、构建工具、平台和模拟器。
  • 运行程序架构和指令集:ARM、x86。这在使用模拟器时非常重要。
  • 环境变量:某些变量由 CI 系统设置(例如:ANDROID_HOME),您也可以自行设置,例如避免在工作流中对凭据进行硬编码。

此外,您还应考虑许多其他方面,例如可用的核心数量,以及是否启用了虚拟化来运行模拟器。

日志和报告

如果某个步骤失败,CI 系统会通知您,但通常不允许您合并更改。如需找出问题所在,请在日志中查找错误。

此外,构建和测试生成的报告通常作为该特定 build 的工件存储。根据 CI 系统,您可以使用插件直观呈现这些报告的结果。

缓存和 CI 运行时间

CI 系统使用构建缓存来加速流程。简单来说,它们会在构建成功后保存所有 Gradle 缓存文件,并在构建新文件之前恢复这些文件。这依赖于 Gradle 的构建缓存功能,因此应在您的项目中启用。

缩短运行时间并提高可靠性的一些方法包括:

  • 模块:检测哪些模块受更改影响,并仅构建和测试这些模块。
  • 跳过缓存:如果构建包含开发者修改过的脚本,则忽略构建缓存。从头开始构建更安全。
  • 分片测试:对于插桩测试,将测试分片到多个设备上会很有帮助。Android 运行程序、Gradle 管理的设备和 Firebase Test Lab 均支持此功能。
  • 分片构建:您可以将构建分片到多个服务器实例。
  • 远程缓存:您也可以使用 Gradle 的远程缓存

重试失败的测试

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

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

失败

操作

模拟器有一秒无响应,触发了超时

重新运行失败的测试

模拟器未能启动

重新运行整个任务

代码检出阶段发生连接错误

重启工作流

请务必记录并跟踪系统的哪些部分不稳定,并投入资源来使 CI 可靠且快速,并且仅依赖于重试