DevOps 模式

从单个位置编写代码,并部署到开发、测试和生产环境中可能位于本地数据中心、私有云或公有云的多个目标。

上下文和问题

应用程序部署持续性、安全性和可靠性对于组织和开发团队而言至关重要。

应用通常需要重构的代码才能在每个目标环境中运行。 这意味着应用不一定完全可移植。 它在每个环境之间移动时,必须进行更新、测试和验证。 例如,在开发环境中编写的代码必须经过重写才能在测试环境中运行,且在最后进入生产环境时也必须重写。 此外,此代码绑定到具体的主机。 这可能会提高维护应用的成本和复杂性。 应用的每个版本绑定到每个环境。 提高的复杂性和重复性使安全和代码质量承受更高的风险。 此外,在删除还原失败的主机或部署其他主机以应对增大的需求时,代码无法直接重新部署。

解决方案

可以使用 DevOps 模式来生成、测试和部署在多个云上运行的应用。 此模式统合了持续集成和持续交付的做法。 借助持续集成,每当团队成员对版本控制提交更改时,都会生成并测试代码。 持续交付在生产环境中将每个生成步骤自动化。 这些过程共同建立了一个发布过程,可支持跨不同环境的部署。 使用此模式可以草拟代码,然后将相同的代码部署到本地环境、不同的私有云和公有云。 环境中的差异需要对配置文件进行更改,而不是更改代码。

DevOps pattern

使用在本地、私有云和公有云环境之间一致的一组开发工具可以实现持续集成和持续交付的做法。 使用 DevOps 模式部署的应用和服务可互换,可在其中任一位置运行,并可利用本地和公有云的特性与功能。

使用 DevOps 发布管道有助于:

  • 根据单个存储库中提交的代码启动新的生成。
  • 自动将新生成的代码部署到公有云进行用户验收测试。
  • 代码通过测试后,可自动部署到私有云。

问题和注意事项

DevOps 模式旨在确保无论目标环境为何,都能实现跨部署的一致性。 但是,云和本地环境中的功能有所不同。 请考虑以下要点:

  • 部署中的函数、终结点、服务和其他资源在目标部署位置是否可用?
  • 配置项目是否存储在可跨云访问的位置?
  • 部署参数是否可在所有目标环境中正常运行?
  • 是否在所有目标云中都可以使用资源特定的属性?

有关详细信息,请参阅开发用于实现云一致性的 Azure 资源管理器模板

此外,在决定如何实现此模式时,请考虑以下几点:

可伸缩性

部署自动化系统是 DevOps 模式中的关键控制点。 实现方式可能有所不同。 哪个服务器大小合适取决于预期工作负荷的大小。 VM 的缩放成本高于容器。 但是,若要使用容器进行缩放,则必须配合容器运行生成过程。

可用性

DevPattern 上下文中的可用性是指能够恢复与工作流关联的任何状态信息,例如测试结果、代码依赖项,或其他项目。 若要评估可用性要求,请考虑两个常见指标:

  • 恢复时间目标 (RTO) 指定允许系统发生故障多长时间。

  • 恢复点目标 (RPO) 表示服务中断影响到系统时,允许丢失多少数据。

在实践中,RTO 和 RPO 涉及到冗余和备份。 在全局 Azure 云上,可用性不是硬件恢复的问题(这是 Azure 的部分责任),而是为了确保维持 DevOps 系统的状态。 在 Azure Stack Hub 上,硬件恢复可能是一个考虑因素。

设计用于部署自动化的系统时,另一个主要考虑因素是将服务部署到云环境所需的访问控制和适当的权限管理。 创建、删除或修改部署时需要哪些权限? 例如,在 Azure 中创建资源组时通常需要一组权限,而在资源组中部署服务时则需要另一组权限。

可管理性

基于 DevOps 模式设计任何系统时,必须考虑整个组合中各项服务的自动化、日志记录和警报。 请使用共享服务和/或应用程序团队,并跟踪安全策略和监管情况。

在 Azure 或 Azure Stack Hub 上的独立资源组中部署生产/测试环境。 然后,可以监视每个环境的资源,并按资源组汇总计费成本。 还可以删除作为集的资源,这适用于测试部署。

何时使用此模式

使用此模式的时机:

  • 可以在一个符合开发人员需求的环境中开发代码,并部署到特定于解决方案的、可能难以开发新代码的环境中。
  • 可以使用开发人员所需的代码和工具,只要他们能够遵守 DevOps 模式中的持续集成和持续交付过程即可。

不推荐使用此模式:

  • 如果无法自动完成基础结构、预配资源、配置、标识和安全任务。
  • 如果团队无权访问混合云资源,因此无法实施持续集成/持续开发 (CI/CD) 方法。

后续步骤

若要详细了解本文中介绍的主题:

准备好测试解决方案示例时,请继续阅读 DevOps 混合 CI/CD 解决方案部署指南。 该部署指南逐步说明了如何部署和测试 Azure Stack 的组件。 了解如何使用混合持续集成/持续交付 (CI/CD) 管道将应用部署到 Azure 和 Azure Stack Hub。