作者:京东零售 叶萌

现代软件开发一般会凭借 CI/CD 来提高代码质量、加速发版速度、自动化重复的工作,iOS App 只能在 mac 机器上编译,CI/CD 东西因而需求有一个 macOS 云服务器集群来履行 iOS App 的编译。
今天就来谈谈怎么建造 macOS 云服务器集群

如何建设一个用于编译 iOS App 的 macOS 云服务器集群?

购买 mac mini / Mac Studio 机器

最简单的方法便是购买一批 mac 机器,买它个 1000 台,买回来后放入机房,把其中一台机器作为办理机,请求办公网拜访这台机器的网络权限,每非必须保护这批机器里的软件时,先从办公网进入办理机,然后从办理机在远程连接到其他机器。

虚拟化 macOS 集群

凭借 macOS 官方的Virtualization.Framework,能够分钟级创建 macOS 虚拟机,这种方法创建的虚拟机功能、稳定性、安全性都很高,能够继续选用更新、更快、更高级的 mac 硬件,最终完成更快的 App 编译速度。

在企业内部请求 macOS 机器,需求阅历请求预算、领导批阅、收购、运输、布置至机房等繁琐步骤,现在可经过购买高配置的 mac 机器,然后再将其按需配置成多台虚拟机,减少了硬件保护本钱,提高了扩容效率。这方面代表性产品有

  • github.com/cirruslabs/…
  • www.macstadium.com/anka

移动端 CI/CD 渠道 bitrise 选用的是这种方法,只不过他们做了许多自研工作,打造了Gen2编译基础设施,声称能让客户更快、更频频的发布 App

云端办理 macOS 服务器

自行购买并保护 mac 机器仍是不太便利,本钱很高,假如能云端办理、按需付费就更好了。亚马逊的 AWS 处理了这个问题,他家的Amazon EC2 Mac Instances能让咱们按需请求 macOS 服务器,假如能承受云端服务的话,其实这种方法最省事。与这种服务类似的产品有

  • flow.swiss/mac-bare-me…
  • www.scaleway.com/en/hello-m1…

在 linux 里运转 macOS 虚拟机

sickcodes/Docker-OSX是最近盛行的一个项目。

  • 凭借 KVM 技能,完成了在 linux 里运转 macOS 虚拟机
  • 凭借 docker,简化了 macOS 虚拟机的布置

这个项目具有许多优势,例如

  1. 不依赖专门的 Apple 硬件,能够运转 KVM 的 x86_64 机器就行
  2. 能够经过 docker 容器来布置 macOS 虚拟机。未来凭借 k8s,能够完成大规划 macOS 服务器的办理,容易完成扩缩容

也有危险

  1. 不太合规,macOS 正常只能在 Apple 硬件上运转
  2. 在 KVM 里运转 macOS,兼容性、功能、稳定性需求评价。假如出现问题需求付费找项目保护者处理

我在裸金属上利用 Docker-OSX 项目确实跑起来了 macOS 虚拟机。运转该项目有以下几点要注意

  1. linux 宿主机需求支撑嵌套虚拟化(Nested Hardware Virtualization)。开启硬件虚拟化后才能装置 kvm。裸金属和物理机正常都支撑
  2. 对 Linux 内核有要求,操作系统最好比较新,CentOS 8 能够,CentOS 7 不可

在 Apple 硬件上用 k8s 来调度 macOS

有没有可能在私有云里完成 aws 这种 mac 办理体验呢?MacStadium家的 Orka 渠道做到了。Orka 有以下好处

1 – 降低了 mac 集群的办理本钱
花时间更少,例如办理服务器、在服务器上装置软件

利用 Kubernetes 调度 mac 服务器,这与 Linux 服务器的办理保持一致,便利融入公司已有技能栈

2 – 在真正的 Apple 硬件上运转 mac 虚拟机
不用担心兼容性、稳定性、功能问题

3 – 用心为开发者规划
提供多种操作方法(命令行、REST API)来办理 mac 虚拟机

对于企业来说,能够考虑购买 Orka 渠道,在私有云里面建立 macOS 云服务器集群。GitLab SaaS 版也是使用这种方法来提供托管的 macOS Runner 的

总结

我讲了建造 macOS 云服务器集群的 5 种方法,这些方法各有利弊,总的来说:

  • 假如能承受使用云服务器,主张直接购买 AWS 的 Amazon EC2 Mac Instances,便利、本钱低
  • 自建机房,假如方案建造的 macOS 集群规划很大,主张购买 MacStadium 的 Orka 渠道来建造,专业服务,防止踩坑,省时省力
  • 自建机房,假如 macOS 集群规划比较小,对自动化要求不高,主张购买高配的 apple 硬件,然后经过Virtualization.Framework虚拟化出多台 macOS 机器,整体架构比较简单,也能处理问题