Airbnb如何利用AWS和Terraform改进其iOS持续集成管道

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,并带来多项显著优势:

  1. 使用单一 AMI:可以自动启动所需的任何额外实例。
  2. 基础设施统一:将所有支持平台的 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 设置提供了多项优势:

  1. 环境创建简便:可以轻松为所需的 CPU 架构和 Xcode 版本创建新的 CI 环境。
  2. 资源优化:当 CI 环境不使用时,可以通过更改自动扩展组配置来禁用。
  3. 性能优化:通过这种方法,Airbnb 可以在不牺牲虚拟机性能的情况下获得虚拟化的好处,并统一处理所有支持平台的 CI 基础设施。

更多关于迁移的详细信息,请参阅原文。

阅读 44
0 条评论