设置 CI/CD 管道
概述
许多开发者使用 持续集成、交付和部署管道 以便在每次进行更改时自动测试和发布应用程序。这对于大型应用程序来说最常见也是最有用的,在这些应用程序中,多人使用共享版本控制系统(如 git)并行处理代码库。
本指南涵盖了大多数 CI/CD 管道常见的高级阶段,并说明了您在每个阶段可以执行的操作。此外,它还包括您可能在管道中执行的常见任务和操作的列表,以配置和测试 Atlas App Services Apps。
提示
查看使用 GitHub 操作的真实示例
如果您想查看管理实际应用程序的测试、部署和其他任务的 CI/CD 管道示例,请查看 MongoDB 开发者中心的如何使用 GitHub Actions 为 App Services 应用构建 CI/CD 管道。
管道阶段
在较高级别上,大多数管道共享一个共同的模式,即经过多个阶段,每个阶段处理不同问题。
开发中
开发阶段是创建新功能和修复应用错误的第一步。在此阶段,您将使用应用程序的配置文件和源代码来实施所需的更改。
要为现有应用程序开发新功能,请执行以下操作:
对主应用程序进行分叉并部署新的开发副本。此实例的应用 ID 与生产应用不同。您还可以使用环境值模板来使用开发数据源和其他与生产无关的服务。
开发您的应用程序。这可能涉及更新或添加客户端应用程序屏幕,以及添加新的数据库触发器或任何其他应用程序功能。如果需要对同步的 Realm 对象模式进行更改,您可以使用开发模式。
在本地运行自动化测试,以确保代码不会引入任何新错误。通过本地测试并不能保证应用没有集成错误,但可以增强信心,确保更改不包含任何倒退或不利行为。
暂存
暂存阶段,您也可以称之为 QA(质量保证)、测试或生产前阶段,是在与生产尽可能相似的环境中模拟开发更改的步骤。这为您提供了应用的可用版本以供审核,并可以帮助您捕获实时服务的集成错误,而不影响生产数据。
暂存部署的具体细节取决于应用程序的需求。但是,您可以使用以下高级步骤进行设置:
设置暂存环境。使用独立的非生产服务和数据源,其配置应尽可能地反映生产情况。例如,您可以使用名为
staging
的 Atlas 集群,该集群的配置与production
集群相同。根据您的具体用例,您可能拥有一个一致的应用,可重复用于所有暂存版本,也可以为每个暂存版本创建新应用。创建或使用现有的暂存版本。您可以在 CI/CD 流程中自动创建暂存版本,例如在创建新的拉取请求时。您可以为每个暂存版本使用新应用,也可以重复使用在各个版本中共享的预构建环境。
验证您的应用程序是否按预期运行。这可能涉及针对您的暂存环境运行自动化测试套件,手动检查行为或通过用户验收测试获得批准。
生产
生产阶段是将修改后的应用程序部署到生产环境中的最后部署步骤。理想情况下,在这个阶段,您已经在本地和暂存环境中测试了更改,以确认可以安全地部署它们。您可以手动部署到生产环境,也可以通过更新生产应用程序作为 CI/CD 工作流程的一部分自动部署到生产环境。
构建任务
本节概述了您将在 CI/CD 管道中执行的常见任务。根据您的使用案例和管道阶段,您可能并不总是执行所有这些任务,但通常大多数管道将至少执行所有这些任务一次。
配置环境
在不同的开发阶段,应用的配置和代码应大致相同。但是,您需要根据环境更改某些配置选项的值。
确定要构建的阶段并设置适当的配置值。例如,您可以在开发阶段使用新应用的 App ID 来配置应用,或在生产阶段使用生产 App ID。
# Use the production App ID for the main branch export REALM_APP_ID="myapp-abcde" # Use a staging App ID for the QA branch export REALM_APP_ID="myapp-staging-fghij" # Use a new App ID for development branches - you'll need to create the app first! export REALM_APP_ID="myapp-dev-zyxwv"
提示
查找应用程序 ID
您可能无法始终对 App ID 进行硬编码。您可以使用 App Services CLI 查找特定的应用程序 ID。有关示例,请参阅创建应用。
设置 App Services CLI
App Services CLI 是以编程方式创建、配置和管理 Atlas 应用的最简单方法。您应在部署脚本中安装并使用最新版本。
App Services CLI 在npm
上可用。要在系统上安装 CLI,请确保您有 Node.js 已安装,然后在 shell 中运行以下命令:
npm install -g atlas-app-services-cli
您还需要 MongoDB Atlas 公共/私有 API 密钥对来进行身份验证和使用 CLI。有关如何获取 API 密钥的更多信息和演练,请参阅编程 API 密钥。
要登录,请将 API 密钥保存在新的命名配置文件配置中,然后使用该配置文件登录:
<Profile Name>: public_api_key: "<MongoDB Atlas Public API Key>" private_api_key: "<MongoDB Atlas Private API Key>" atlas_base_url: "https://cloud.mongodb.com" realm_base_url: "https://services.cloud.mongodb.com" telemetry_mode: ""
appservices login --profile="<Profile Name>"
提示
确保在所有命令中使用 --profile
标记,否则,App Services CLI 无法识别您已登录。
创建 App
您可以使用 App Services CLI 创建用于开发和测试的新应用。如果管道处于开发或暂存阶段,则您应使用实时生产应用以外的应用来部署和测试更改。
要将新应用程序用于开发或暂存分支,请执行以下操作:
创建新的应用程序
根据应用程序的配置文件分支推送新应用程序:
cd path/to/realmApp appservices push -y --project="<MongoDB Atlas Project ID>" # e.g. --project="609ea544934fe445460219a2" 保存应用程序 ID
新应用具有唯一的 App ID 值,稍后需要在管道和客户端应用中识别它。您应该将该值保存到环境变量、文件或其他位置。
# Save to an environment variable output=$(appservices app describe) app_id=$(echo $output | sed 's/^.*client_app_id": "\([^"]*\).*/\1/') export REALM_APP_ID=app_id # Save to a file echo $REALM_APP_ID > ./clients/ios/realm-app-id.txt
更新应用
您可以使用 App Services CLI 更新现有应用,例如共享暂存应用或生产部署。该应用已经存在,因此您应该能够查找其 App ID。
要更新现有的应用程序,请在 --remote
标记中指定其应用程序 ID:
appservices push --remote=$REALM_APP_ID -y
针对应用程序运行测试
您的应用应包括自动化单元和集成测试套件,您可以运行它们以验证一切是否正常。您的测试设置的细节会有所不同,取决于应用,但您可能需要在多个平台上使用各种模拟器来运行测试。
如果您有集成测试,则可以检查上一个版本并针对当前版本的应用运行集成测试,以确保向后兼容性。
清理作业
在 CI/CD 阶段或管道结束时,您可能需要清理专门为该测试创建的资源。例如,如果您创建了新的开发或暂存应用,则在合并更改后,您可以删除这些应用以及与其关联的任何数据库。或者,您不想清理生产应用或持久性暂存应用(如果您使用它们)。
在清理之前,请考虑哪些资源将来可能有用。例如,如果测试失败,您可以选择跳过删除应用及其数据库。这样您就可以手动调查问题并查找导致失败的任何应用设置或数据。