IBM Cloud Docs
使用部署策略在虚拟私有云上开发和部署应用程序

使用部署策略在虚拟私有云上开发和部署应用程序

在本教程中,您将学习如何使用不同的部署策略创建开放式工具链。 您还将学习如何在 IBM Cloud® Continuous Delivery 服务中实施工具链,以及如何使用工具链开发和部署一个简单的网络应用程序(应用程序)。

本教程使用使用 IBM Cloud® Virtual Private Cloud (VPC) 作为部署目标的部署策略。 本教程中使用的工具链实现标准 DevOps 实践,例如代码扫描,验收测试,Git 存储库以及持续集成和持续交付功能。 创建虚拟机和工具链后,更改应用程序的代码并将更改推送到 Git Repos and Issue Tracking 存储库。 将更改推送到存储库时,基于 Tekton 的交付管道会自动构建并部署代码。

Tekton 是一个与供应商无关的开放式源代码 Kubernetes本机框架,可用于构建,测试和部署应用程序。 Tekton 提供了一组共享组件,用于构建 持续集成持续交付 系统。 作为开放式源代码项目,Tekton 由 Continuous Delivery Foundation管理。 目标是通过为管道,工作流程和其他构建块提供行业规范,实现持续交付现代化。 借助 Tekton,您可以通过抽象底层实现详细信息,在云提供者或本地系统之间进行构建,测试和部署。 Tekton 管道内置到 Continuous Delivery中。 有关 IBM Cloud® Kubernetes Service的更多信息,请参阅 IBM Cloud® Kubernetes Service

本教程中使用的模板适用于一组虚拟机的标准套餐。

您可以使用部署策略以受控方式在生产环境中更新应用程序。 使用部署策略可提供以下优点:

  • 避免应用程序停机时间。
  • 在不影响客户的情况下启用新功能的生产测试。
  • 将生产问题的影响限制为一部分用户。
  • 如果发现问题,请启用到先前版本的快速回滚。

提供了许多可能的部署策略。 通常,它们依赖于运行应用程序的多个实例以及管理各种实例的更新方式。 您可以在 Continuous Delivery中预先配置以下公共部署策略:

基本
通过同时停止和更新所有正在运行的实例来部署新发行版,从而导致停机时间。 对于回滚,必须再次部署先前版本,这将导致额外的停机时间。 尽管此策略简单,快速且运行时资源需求较低,但它是最危险的策略,会导致停机时间。 对于必须具有高可用性的关键应用程序,建议不要使用基本部署策略。
滚动更新
与基本策略类似,此部署策略简单,快速且具有较低的运行时资源需求。 但是,由于每个正在运行的实例都已关闭并单独更新,因此避免了停机时间,因此回滚需要您再次部署先前发行版。 如果生产中应用程序的当前版本已损坏,那么此耗时方法可能会导致问题。
蓝绿部署 (blue-green deployment)
创建两个独立的永久生产环境 (蓝色和绿色),并且一次只有其中一个环境接收流量。 当前发行版始终部署到空闲环境,并且在部署完成后将流量切换到该环境,而不会出现停机时间。 由于只需要将流量切换到未更改的环境,因此回滚不会导致停机时间。 因为这个策略需要两个完整的生产环境,所以资源要求更高。 但是,此策略支持强大的开发者流,例如,在允许客户流量之前,能够在生产环境中测试新的应用程序版本。 Blue-Green 部署还支持快速回滚。
Canary 版本
部署与原始生产环境 (类似于 Blue-Green) 并行的新发行版,无停机时间。 将管理发送到已更新实例和原始实例的流量,以便在部署继续时,新版本可供受控制的用户子集使用。 随着时间的推移,发送到新版本的流量会增加,直到所有流量都发送到那里,此时您可以停止旧的生产环境。 为了在部署过程中快速回滚,您可以将所有流量路由到原始生产环境。 由于此策略仅在部署期间需要两个完整的生产环境,因此总体资源使用量低于 Blue-Green 部署的资源使用量。 Canary 发行版部署策略最慢地从先前发行版移至正在部署的软件的当前发行版。 Canary 部署允许组织在生产中并排测试两个不同的软件版本。

准备工作

在开始本教程之前,请确保您具有以下资源:

  • 具有标准套餐的 IBM Cloud 帐户。 有关使用 IBM Cloud 帐户的更多信息,请参阅 设置 IBM Cloud 帐户升级帐户

  • 供应的 VPC 基础结构。 根据要使用的部署策略类型,单击下列其中一个链接以创建 IBM Cloud® Schematics 工作空间。 此工作空间生成并应用 Terraform 计划,以创建运行和访问应用程序所需的 VPC,虚拟服务器实例和负载均衡器。

    "供应 VPC 以进行滚动" 按钮 供应 VPC for Blue-Green 按钮 供应 VPC for Canary 按钮

  • Continuous Delivery 服务的实例。

  • 可选。 一组私钥,存储在私钥管理保险库文件中,并从单个位置集中管理。 有关选择私钥管理和数据保护产品的更多信息,请参阅 管理 IBM Cloud 私钥。 如果您还没有所选私钥管理保险库提供程序的实例,请创建一个。

创建工具链

在此步骤中,您将创建 使用部署策略将应用程序开发和部署到 VPC 工具链。 在工具链设置期间,将使用 SSH 密钥配置目标虚拟机。 稍后可以通过更新 Delivery Pipeline 配置来更改这些设置。 合并到目标 Git 存储库分支中的任何代码都将自动构建,验证并部署到虚拟机中。

要创建 使用部署策略将应用程序开发和部署到 VPC 工具链,请单击

创建工具链

或者,从IBM Cloud控制台,单击菜单图标汉堡包图标>平台自动化>工具链。 在“工具链”页面,单击“创建工具链”。 在“创建工具链”页面上,单击“开发并使用多种部署策略将应用程序部署到 VPC”。

配置工具链名称和区域

复查工具链设置的缺省信息。 工具链的名称在 IBM Cloud 中起到标识符的作用。 确保工具链的名称在工具链中对于 IBM Cloud中的相同区域和资源组是唯一的。

工具链区域可能与集群和注册表区域不同。

VPC 安全应用程序工具链名称和区域*
安全应用程序工具链名称和
*

选择部署策略

工具链将创建持续部署管道以在 IBM Cloud® Kubernetes Service上部署应用程序 Docker 映像。 选择要使用的部署策略。 根据您选择的部署策略 (Rolling,Blue-Green 或 Canary),必须提供更多详细信息。

  1. 单击要用于工具链的部署策略。

    部署战略
    部署
    *

  2. 单击继续

配置应用程序源代码存储库

在“应用程序”步骤中,缺省情况下将显示应用程序源代码存储库的建议选项。 要查看底层 Git 集成的所有可用选项,请单击 高级选项。 缺省情况下,工具链使用缺省样本,该样本将样本应用程序克隆为 IBM托管的 Git Repos and Issue Tracking 存储库。

VPC 安全应用程序
安全应用程序

您可以更改应用程序存储库的名称。 存储库的区域仍与工具链的区域相同。

工具链模板提供了使用 Maven 构建的样本 Java™ Spring 应用程序。 如果您想为工具链链接现有的应用程序仓库,请选择 “自带应用程序”,并指定仓库的 URL。 该工具链仅支持链接到现有的 Git Repos and Issue Tracking 存储库。

缺省情况下,会将应用程序存储库模板克隆到 Git Repos and Issue Tracking 组织。 要更改组织,请启用 高级选项 并指定存储库所有者。

配置库存存储库

库存存储库记录由持续集成工具链构建的工件的详细信息。 您可以创建作为 库存存储库模板 的克隆的新库存存储库,也可以使用您在工具链之间共享的现有库存存储库。

VPC 安全应用程序库存
安全应用程序库存

缺省情况下,会将库存存储库模板克隆到 Git Repos and Issue Tracking 组织。 要更改组织,请选择 高级选项 并指定存储库所有者。

安全地存储私钥

此工具链中的多个工具需要私钥,例如 IBM Cloud API 密钥。 必须将所有私钥安全地存储在私钥保险库中,并根据工具链的要求进行引用。

通过使用 IBM Cloud,您可以从各种私钥管理和数据保护产品中进行选择,以帮助您保护敏感数据并集中私钥。 在“私钥”步骤中,可以指定要在工具链中添加或除去的私钥保险库集成。 有关添加和除去保险库文件集成的更多信息 (包括先决条件和使用提示),请参阅 管理 IBM Cloud 私钥

通过在模板中使用提示,将使用预先配置的私钥自动填充工具链; 您无需从附加到工具链的保险库文件集成中手动选择私钥。

本教程使用 IBM Secrets Manager 作为私钥保险库。

VPC 安全应用程序机密选项
VPC 安全应用程序机密选项* VPC 安全应用程序机密

IBM Secrets Manager 可安全地存储和应用属于工具链的私钥,例如 API 密钥,图像签名或 HashiCorp 凭证。

Secrets Manager options
Secrets Manager options

有关在 IBM Key Protect 或 HashiCorp, 中管理机密的更多信息,请参阅 机密

配置部署目标

通过指定 VPC,Bastion Host,Load Balancer 和 Artifact Store 的详细信息,为工具链配置部署目标。 本教程使用 Blue-Green 部署策略。

蓝绿战略
部署目标蓝绿
*部署目标

配置 VPC 详细信息

通过指定有关 VPC 和虚拟服务器实例 (VSI) 的信息来配置工具链。

您在选择要使用的部署策略时,使用 IBM Cloud® Schematics 和 Terraform 供应了 VPC 和 VSI。

  • 虚拟私有云区域: 选择在其中供应 VPC 的区域。
  • 虚拟私有云名称: 选择使用 Terraform 模板供应的 VPC。 选项包括所选区域中的所有可用 VPC。
  • VPC 实例的用户名: 指定供应 VPC 实例时配置的用户名。 VPC 中的所有 VSI 都需要用户名和 SSH 密钥才能登录和部署该实例。
  • Base64 为 VPC 实例编码的 SSH 密钥: 为供应 VPC 实例时配置的公用 SSH 密钥指定 base64-encoded 格式的专用 SSH 密钥。

配置堡垒主机详细信息

Terraform 模板还会创建 VSI 以用作堡垒主机。 Bastion 主机提供了一种安全的方法来连接到 VPC 中的 VSI 以完成部署和维护任务。 Bastion 主机使用您在 VPC 详细信息中配置的凭证 (用户名和 SSH 密钥) 通过 SSH 连接到 VSI。

工具链要求您登录到 VPC 中的 VSI 以部署应用程序二进制文件,启动和停止应用程序,并下载第三方依赖关系以运行应用程序。 所有这些任务都是通过将 SSH-Tunneling 与 Bastion 主机配合使用来实现的。 工具链使用相同的凭证来登录到堡垒主机,堡垒主机使用这些凭证来连接到 VSI。

  • 堡垒主机: 选择由 Terraform 模板作为堡垒主机供应的 VSI。

配置负载均衡器详细信息

在 VPC 中的 VSI 上部署的样本应用程序在端口 8080 上显示一个简单的 Web 页面。 要通过使用 DNS 名称在因特网上提供应用程序,并在运行应用程序的多个 VSI 之间负载均衡流量,Terraform 模板将供应应用程序负载均衡器。 运行应用程序的所有 VSI 都构成负载均衡器的后端服务器池。

工具链使用负载均衡器和两个后端池的详细信息来配置和重定向蓝绿色部署过程中的实时应用程序流量。 蓝色后端池和绿色后端池包含相同数量的 VSI。 在任何时候,只有一个池主动为实时流量提供服务,而另一个池通过运行较旧版本的应用程序而保持空闲状态。 负载均衡器交换或切换为每个部署提供实时流量的后端池。 当蓝色后端池当前处于活动状态时,下一个部署会在绿色后端池中的 VSI 上部署应用程序,并在蓝色后端池处于被动状态时使其处于活动状态。

通过指定有关负载均衡器的信息来配置工具链:

  • 负载均衡器名称: 选择由 Terraform 模板供应的应用程序负载均衡器。
  • 蓝色后端池名称: 选择 Terraform 模板为负载均衡器供应的蓝色后端池。
  • 绿色后端池名称: 选择 Terraform 模板为负载均衡器提供的绿色后端池。

蓝绿部署目标战略
蓝绿部署目标
*

填充 deployment target 步骤的详细信息后,继续执行下一步。

配置工件存储器

对源的任何更改都会触发持续集成管道。 当连续集成运行成功时,将创建构建或二进制工件并将其保存在瞬态存储器中,然后将其部署到目标 VSI。

VPC人工制品存储
VPC人工制品
*

您可以使用 IBM Cloud Object Storage 在工具链中存储瞬态构建工件。 持续集成管道将为样本 Spring Java 应用程序构建可执行 .jar 文件。

VPC artifact storage Cloud Object Storage
VPC artifact storage Cloud Object Storage

或者,如果您有自己的 Artifactory 实例,那么可以使用 Artifactory。

添加可选工具集成

您可以将 IBM Cloud® DevOps Insights 工具集成添加到工具链,而无需任何其他配置。

DevOps Insights 包含在创建的工具链中。 您不需要为 DevOps Insights提供任何配置步骤。 连续集成管道自动使用工具链中包含的 DevOps Insights 实例。DevOps Insights 聚集代码,测试,构建和部署数据,以提供对所有团队和发行版的速度和质量的可视性。

单击继续

完成工具链设置

在摘要页面,单击创建。 此时将自动运行数个步骤,以设置工具链。

您可以在创建管道后配置各个工具链集成。

Kubernetes secure app toolchain summary
VPC secure app toolchain summary

探索新的工具链

创建工具链后,它将在图中显示属于工具链的每个工具集成。

浏览管道

您可以浏览管道以了解工具链流以及在每个管道中运行的不同操作。 您刚刚创建的工具链包含三个管道:

  • 拉取请求管道: 当开发者将其开发分支中的更改合并到主分支或存储库中的任何其他分支时运行。 拉取请求管道在应用程序源代码上运行单元测试和静态扫描。
  • 持续集成管道: 将更改合并到应用程序源代码存储库的主分支时运行。 持续集成管道在应用程序源代码,CIS 检查和材料清单 (BOM) 检查上运行“单元测试”,“代码覆盖”和“静态扫描”。 持续交付管道还会生成二进制构建工件,并将它们上载到工具链中配置的 IBM Cloud® Kubernetes Service。 持续集成管道生成构建工件的元数据并将其存储在“库存”存储库中。
  • 持续部署管道: 将构建工件部署到部署环境。 管道通过运行运行状况检查来验证应用程序的成功部署。 在连续集成管道成功完成后,必须手动触发此管道。 根据您选择的部署策略,会向持续交付管道添加更多触发器。

运行拉取请求和持续集成管道

要启动拉取请求管道,请在应用程序存储库中创建合并请求:

  1. 在“工具链的概述”页面上的 存储库 卡上,单击 compliance-app-<timestamp> 应用程序存储库。
  2. 从主存储库中,创建分支。
  3. 更新样本节点应用程序或自述文件中的一些代码并保存这些更改。
  4. 提交合并请求。
  5. 在“工具链的概述”页面上的 存储库 卡上,单击 pr-pipeline 存储库以启动拉取请求管道。 应用程序存储库中的相应合并请求将保持处于暂挂状态,直到拉取请求管道的所有阶段成功完成为止。
  6. 在拉取请求管道运行成功后,您可以选择该管道以浏览已完成的步骤。

要启动持续集成管道,请在应用程序存储库中合并持续集成合并请求:

  1. 转至合并请求。
  2. 合并请求,以便将更改复制到应用程序存储库的主分支。 将自动触发持续集成管道。
  3. 在“持续集成工具链概述”页面上的 存储库 卡上,单击 ci-pipeline 存储库以启动持续集成管道。
  4. 连续集成管道运行成功后,您可以单击管道运行以探索已完成的步骤。

持续集成管道成功
持续集成管道成功*持续集成管道

要评估管道运行中是否有任何故障,请检查管道的最后一个步骤,该步骤具有管道评估程序。

探索持续交付管道

拉取请求和持续集成管道在所有部署策略中通用。 持续交付管道设计和实现更改基于您先前在本教程中选择的部署策略。

本教程演示了 Blue-Green 部署策略如何使用样本应用程序来工作。

探索 Blue-Green 部署

本教程中使用的蓝绿色部署策略演示了如何将部署策略与 Continuous Delivery 服务配合使用以在 VPC 上运行生产工作负载。 持续交付管道为蓝绿色部署提供了三个触发器。 您可以通过以下任一方式启动持续交付管道:

  • 手动触发持续交付管道。
  • 在库存存储库中的每个 Merge 操作后自动触发持续交付管道。 合并后,必须手动触发持续交付管道运行。
  • 在蓝色和绿色部署之间切换以实现自动回滚。

用于蓝绿部署的持续交付管道触发器
用于蓝绿
的持续交付管道触发器*持续交付管道触发器

本教程显示了 Blue-Green 部署策略如何使用样本应用程序工作。

  1. 从持续交付管道运行手动触发器以部署应用程序的第一个版本。

    持续交付管道手动运行
    持续交付管道手动运行* 持续交付管道手动

  2. 在持续交付管道的 release 步骤中找到 URL 应用,点击 URL 以确认该应用正在运行。

    应用程序 URL 位置
    应用程序 URL 位置

  3. 更新应用程序代码并落实更改。 对于样本应用程序,请更新欢迎消息:

    a. 在“工具链的概述”页面上的 存储库 卡上,单击样本应用程序存储库。

    b. 更新 utils.js 文件中的欢迎消息。

    c. 等待持续集成管道运行成功完成。

  4. 从持续交付管道运行手动触发器,并等待持续交付管道运行成功完成。

  5. 请再次检查应用程序 URL,确认已部署更新的应用程序。 这两个应用程序版本同时运行。 所有网络流量都流向更新后的应用程序。

  6. 通过从持续交付管道运行 switch-blue-green 触发器来测试回滚。 等待切换触发器管道运行成功完成。

    连续交付管道切换触发器
    连续交付管道切换
    *成功

  7. 请再次检查应用程序 URL,确认显示的是旧版本。

您可以多次运行交换机触发器,以在应用程序的先前版本与最新版本之间进行交替。

寻求帮助?

IBM Cloud 的AI助手,由 IBM 的 watsonx 提供支持,旨在帮助您了解如何在 IBM Cloud 中工作,以及如何使用可用产品和服务目录构建解决方案。 请参阅 “从人工智能助手获取帮助”。

有关更多支持选项,请参阅 获取 Continuous Delivery 的帮助和支持。