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 可靠且快速,并且仅依赖于重试
本页面上的内容和代码示例受内容许可部分所述许可的限制。Java 和 OpenJDK 是 Oracle 和/或其关联公司的注册商标。
最后更新时间 (UTC):2023-12-02。
[{
"type": "thumb-down",
"id": "missingTheInformationINeed",
"label":"没有我需要的信息"
},{
"type": "thumb-down",
"id": "tooComplicatedTooManySteps",
"label":"太复杂/步骤太多"
},{
"type": "thumb-down",
"id": "outOfDate",
"label":"内容需要更新"
},{
"type": "thumb-down",
"id": "translationIssue",
"label":"翻译问题"
},{
"type": "thumb-down",
"id": "samplesCodeIssue",
"label":"示例/代码问题"
},{
"type": "thumb-down",
"id": "otherDown",
"label":"其他"
}]
[{
"type": "thumb-up",
"id": "easyToUnderstand",
"label":"易于理解"
},{
"type": "thumb-up",
"id": "solvedMyProblem",
"label":"解决了我的问题"
},{
"type": "thumb-up",
"id": "otherUp",
"label":"其他"
}]
{"lastModified": "\u6700\u540e\u66f4\u65b0\u65f6\u95f4 (UTC)\uff1a2023-12-02\u3002"}
[[["易于理解","easyToUnderstand","thumb-up"],["解决了我的问题","solvedMyProblem","thumb-up"],["其他","otherUp","thumb-up"]],[["没有我需要的信息","missingTheInformationINeed","thumb-down"],["太复杂/步骤太多","tooComplicatedTooManySteps","thumb-down"],["内容需要更新","outOfDate","thumb-down"],["翻译问题","translationIssue","thumb-down"],["示例/代码问题","samplesCodeIssue","thumb-down"],["其他","otherDown","thumb-down"]],["最后更新时间 (UTC):2023-12-02。"]]