池州市减裂仙境150号 +13594780367 chastened@mac.com

公司动态

  • Home
  • 在您的持续集成管道中添加 macOS,使用 AWS CodeBuild 新闻博客

在您的持续集成管道中添加 macOS,使用 AWS CodeBuild 新闻博客

2026-01-27 13:41:27 31

在 AWS CodeBuild 中将 macOS 添加到您的持续集成管道

关键要点

从现在起,您可以在 AWS CodeBuild 上构建 macOS 应用程序。CodeBuild 为您管理 Apple M2 机器上的构建,以更高效地在 AWS Cloud 中构建、测试、签名和分发 Apple 系统的应用。通过配置重复容量集群,客户能够更轻松地进行 macOS 构建,并实现自动扩展。

今天开始,您可以使用 AWS CodeBuild 在 macOS 上构建应用程序。您现在能够在管理的 Apple M2 机器上运行 macOS 14 Sonoma 进行构建。AWS CodeBuild 是一个完全托管的持续集成服务,可编译源代码、运行测试并生成可部署的软件包。

构建、测试、签名和分发 Apple 系统的应用包括 iOS、iPadOS、watchOS、tvOS 和 macOS需要使用仅在 macOS 上运行的 Xcode。当您在 AWS Cloud 中为 Apple 系统进行构建时,您可能已经将持续集成和持续部署CI/CD管道配置为在 Amazon Elastic Cloud Compute (Amazon EC2) Mac 实例 上运行。

自从我们在 2020 年推出 Amazon EC2 Mac 以来,我花了很多时间与来自不同地区和行业的客户合作,帮助他们配置和优化基于 macOS 的管道。在最简单的情况下,客户的管道可能如下图所示。

管道在源代码库中有新的提交或拉取请求时开始。安装在机器上的仓库代理会触发各种脚本,以配置环境、构建和测试应用程序,最终将其部署到 App Store Connect。

Amazon EC2 Mac 大大简化了对 macOS 机器的管理和自动化。正如我所描述的,EC2 Mac 实例具有我喜欢的所有 Amazon EC2 功能包括 Amazon Elastic Block Store (Amazon EBS) 卷、快照、虚拟私有云VPC、安全组等,在云中运行的 Mac mini。

然而,客户面临两个挑战。首先是准备包含所有必要构建工具的 Amazon machine image (AMI)。最小构建环境需要 Xcode,但通常会安装 Fastlane和 Ruby及其他构建或开发工具和库。大多数组织需要针对多种 macOS 和 Xcode 版本组合设置多个构建环境。

第二个挑战是根据构建的数量和持续时间来扩展构建设备。大组织通常每天有数百或数千个构建,需要数十台构建机器。根据需要扩展和缩减构建设备可以节省成本。EC2 Mac 实例仅供您专用使用。一台实例只能分配给一个专用主机。要 扩展专用主机组,需要特定配置。

为了解决这些挑战并简化 macOS 构建设备的配置和管理,我们今天推出了适用于 macOS 的 CodeBuild。

CodeBuild for macOS 基于最近推出的 预留容量集群,该集群包含由 CodeBuild 维护的 Amazon EC2 实例。使用预留容量集群,您可以为构建环境配置一组专用实例。这些机器保持空闲,随时准备处理构建或测试,从而缩短构建时间。通过预留容量集群,您的机器始终处于运行状态,只要它们被提供,就会持续产生费用。

CodeBuild 提供一个标准的磁盘映像AMI来运行您的构建。它包含预安装的 Xcode、Fastlane、Ruby、Python、Nodejs 和其他流行开发和构建工具的版本。完整的 已安装工具列表 可在文档中找到。随着时间的推移,我们将提供包含这些工具更新版本的额外磁盘映像。如果您想,也可以自定义磁盘映像。

此外,CodeBuild 使得配置自动扩展变得简单。您告诉我们所需的容量,我们将为您管理一切。

让我们看看 macOS 的 CodeBuild 如何运作

为了向您展示其工作原理,我为我的宠物项目创建了一个 CI/CD 管道:在 iOS 上入门 AWS Amplify。该教程及其附带的源代码解释了如何创建一个简单的具有云后端的 iOS 应用程序。该应用使用 GraphQL APIAWS AppSync、NoSQL 数据库Amazon DynamoDB、基于文件的存储Amazon Simple Storage Service (Amazon S3)和用户认证Amazon Cognito。AWS Amplify for Swift 作为粘合剂,将这些服务连接在一起。

教程和该应用的源代码可在 Git 仓库中获取,其中包括 自动化构建、测试和部署应用的脚本。

使用适用于 macOS 的 CodeBuild 配置新的 CI/CD 管道涉及以下高层步骤:

创建构建项目。创建专用机器集群。配置一个或多个构建触发器。在项目中添加管道定义文件buildspecyaml。

要开始,我打开 AWS 管理控制台,选择 CodeBuild,并选择 创建项目。

我输入 项目名称,并配置与 源 代码仓库的连接。在这个例子中,我使用 GitHub。CodeBuild 还支持 GitLab 和 BitBucket。文档中提供了最新的 受支持的源代码仓库列表。

在您的持续集成管道中添加 macOS,使用 AWS CodeBuild 新闻博客

对于 资源配置模型,我选择 预留容量。这是唯一可以使用 Amazon EC2 Mac 实例的模型。我尚未定义集群,因此决定在创建构建项目时动态创建一个。选择 创建集群。

在 计算集群配置 页面,我输入 计算集群名称,并选择 macOS 作为 操作系统。在 计算 下,我选择构建项目所需的内存量和 vCPUs 数量,以及希望的实例数量。

在这个例子中,我选择使用 托管映像。它包括 Xcode 154 和 iOS 175 的模拟器运行时等软件包。您可以在文档中阅读 该映像上预安装的软件包列表。

云梯加速器永久免费版

完成后,我选择 创建集群,返回到 CodeBuild 项目创建页面。

接下来,我告诉 CodeBuild 创建一个新的服务角色,以定义我的构建环境所需的权限。在这个项目的上下文中,我必须包括拉取 Amplify 配置和访问 AWS Secrets Manager 的权限。我没有提供逐步说明,但 示例项目代码包含我添加的权限列表。

我可以选择在项目定义中提供自定义构建命令,或在项目中包含 buildspecyaml 文件。我选择后者。

虽然这不是必需的,但我希望将构建产物上传到 S3 存储桶,以便我可以存档每个构建。在 Artifact 1 Primary 部分中,我选择 Amazon S3 作为 类型,并输入 存储桶名称 和产物 名称。要上传的文件名在 buildspecyaml 文件中指定。

在页面下方,我配置项目触发器以添加 GitHub WebHook。这将配置 CodeBuild 在每次向 GitHub 中的项目提交提交或拉取请求时启动构建。

最后,我选择页面底部的橙色 创建项目 按钮来创建此项目。

测试我的构建

我的项目已包括准备构建、构建项目、运行测试并将其部署到 Apple 的 TestFlight 的构建脚本。

我在项目根目录下添加了一个 buildspecyaml 文件,以编排这些现有的脚本。

yamlversion 02

phases install commands code/ciactions/00installrosettash prebuild commands code/ciactions/01keychainsh code/ciactions/02amplifysh build commands code/ciactions/03buildsh code/ciactions/04localtestssh postbuild commands code/ciactions/06deploytestflightsh code/ciactions/07cleanupshartifacts name (date Ymd)gettingstartedipa files getting startedipa basedirectory code/buildrelease

我将此文件添加到 Git 仓库,并使用以下命令将其推送到 GitHub:git commit am add buildspecyaml。

在控制台上,我可以看到构建已经开始。

当我选择构建时,可以查看日志文件或选择 阶段详情 以获取每个构建阶段的高层状态。

当构建成功时,我可以在我的 S3 存储桶中看到上传的 iOS 应用程序 IPA 文件。

CodeBuild 执行的最后一个构建脚本将二进制文件上传到 App Store Connect。我可以在 App Store Connect 的 TestFlight 部分看到新构建。

需要了解的事项

准备 Amazon EC2 Mac 实例并接受首次构建通常需要 810 分钟,这并不特定于 CodeBuild。在机器准备时间内提交的构建将排队,并将在机器可用后按顺序运行。

适用于 macOS 的 CodeBuild 在预留集群上工作。与按需集群不同,您按每分钟构建费用支付,预留集群则按您专用机器被预留的时间收费,即使没有构建在运行。容量预留遵循 Amazon EC2 Mac 24 小时最低分配期的规定,这符合 macOS 软件许可协议第 3Aii 条款。

一个机器集群可以在您的 AWS 账户中跨 CodeBuild 项目共享。集群中的机器仅供您专用使用。只有 CodeBuild 可以访问这些机器。

CodeBuild 会在构建之间清理工作目录,但这些机器会被用于其他构建。这使您可以使用 CodeBuild 本地缓存机制 在构建后快速恢复选定文件。如果您在同一集群上构建不同的项目,请确保在开始新的构建之前重置任何全局状态,例如 macOS 钥匙串 和构建产物,如 SwiftPM 和 Xcode 包缓存。

当您使用自定义构建映像时,请确保它们构建为 64 位 MacArm 架构。您还必须安装并启动 AWS Systems Manager Agent (SSM Agent)。CodeBuild 使用 SSM Agent 安装自己的代理并管理机器。最后,请确保 AMI 可用给 CodeBuild 组织 ARN。

适用于 macOS 的 CodeBuild 可在以下 AWS 区域 中使用:美国东部俄亥俄州、北弗吉尼亚州、美国西部俄勒冈州、亚太地区悉尼和欧洲法兰克福。这些都是提供 Amazon EC2 Mac M2 实

发表评论