Airbnb 将 iOS 持续集成基础设施迁移至 AWS
Airbnb 历史上一直管理着自己的 Mac 设备来运行 iOS 持续集成(CI)管道。由于 AWS 增加了对 Mac 的支持,Airbnb 工程师可以将其 iOS CI 基础设施迁移到 AWS,以提高灵活性、一致性和效率。
迁移背景
与其他平台不同,Airbnb 的 iOS CI 管道最初并未在 AWS 上运行。虽然使用 Mac 设备可以利用 Apple 工具来构建 iOS 应用程序并运行测试,但这增加了维护成本并降低了测试效率。特别是,工程师需要确保所有 Mac 设备都注册到 Airbnb 的移动设备管理工具中,并且运行最新版本的 macOS 和 Xcode。即便如此,仍有可能出现部分设备状态异常,从而被排除在管道之外。更新到最新的 Xcode 版本也带来了诸多问题,可能导致可用测试设备减少和维护成本增加。
迁移至 AWS 的优势
Airbnb 工程师 Michael Bachand 解释说,AWS 提供的 macOS AMI(Amazon Machine Image)使得 Airbnb 能够将其 CI 管道迁移到 AWS,并带来多项显著优势:
- 使用单一 AMI:可以自动启动所需的任何额外实例。
- 基础设施统一:将所有支持平台的 CI 基础设施整合到一起。
技术实现
- HashiCorp Packer:用于构建 AMI。该工具可以根据 HashiCorp 配置语言(HCL)定义的模板启动和配置 EC2 实例。此步骤可以完全自动化,并且 Packer 模板可以通过 Git 进行版本管理。
- Terraform:用于将 iOS CI 基础设施部署到 AWS,类似于其他支持平台的部署方式。所有 AWS 基础设施都在 Terraform 代码中指定,并纳入源代码控制。每次合并与 iOS CI 相关的拉取请求时,Terraform Enterprise 会自动将更改应用到 AWS 账户。
扩展与维护
- 自动扩展组:通过修改版的
buildkite-agent-scaler处理扩展。实例从启动模板创建,模板指定了所有特征,包括 AMI 和“启动”脚本。 - 实例轮换:通过每天终止和替换实例来轮换实例,减少实例漂移的可能性。如果实例出现问题,可以轻松将其从自动扩展组中排除并添加新的干净实例。
优势总结
Bachand 指出,这种 CI 设置提供了多项优势:
- 环境创建简便:可以轻松为所需的 CPU 架构和 Xcode 版本创建新的 CI 环境。
- 资源优化:当 CI 环境不使用时,可以通过更改自动扩展组配置来禁用。
- 性能优化:通过这种方法,Airbnb 可以在不牺牲虚拟机性能的情况下获得虚拟化的好处,并统一处理所有支持平台的 CI 基础设施。
更多关于迁移的详细信息,请参阅原文。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用。你还可以使用@来通知其他用户。