基础设施代码化(Infrastructure as Code),你用对了吗—— 基础设施代码化的CI/CD最佳实践

本文涉及的产品
资源编排,不限时长
简介: 本文重点介绍资源编排服务(Resource Orchestration Service, ROS)的CI/CD最佳实践。 ![image.png](https://ata2-img.cn-hangzhou.oss-pub.aliyun-inc.com/db04ac2143a5fefa5bf90145962715e2.png) 小提示:“基础设施”这个词汇有时有点拗口,或者不直观,其实它

本文重点介绍资源编排服务(Resource Orchestration Service, ROS)的CI/CD最佳实践。

image.png

小提示:“基础设施”这个词汇有时有点拗口,或者不直观,其实它就是指系统或应用所依赖的环境,如服务器,数据库等,在云上,环境有各个云产品资源(简称云资源)组成,如服务器是ECS,数据库是RDS,负载均衡是SLB。所以文中会交叉出现“基础设施”和“环境”使用。

资源编排服务ROS和使用场景

资源编排服务ROS是阿里云提供的云资源的自动化部署服务,可以帮忙您实现一键部署系统所依赖的云资源(ECS,RDS,SLB等),以便满足您部署多地域(如北京,上海等),多环境(如测试,预发,生成)的需要。资源编排服务ROS还提供了常见的系统架构,最佳实践,行业解决方案供您参考。ROS控制台:https://rosnext.console.aliyun.com/

上一篇系列文章“云上部署环境(基础设施)的正确姿势——使用资源编排ROS进行基础设施的部署” https://developer.aliyun.com/article/743051 主要向大家介绍了资源编排服务(ROS)的主要用途,即阿里云上的自动化基础架构(环境)部署服务,再次复习ROS的主要几个场景和优点:

  • 可以快速地重复部署,如部署测试、预发和生产环境,尤其适合需要在多地域部署的情况。
  • 可以减少环境之间的偏差,有助于将部署过程和结果尽量标准化,减少因为环境偏差引入的系统问题。
  • 一键部署,极大地提高了部署效率,即可以更快地发布系统和应用。
  • 一键销毁,在测试完成,或蓝绿部署时,一键销毁所有资源,减少资源浪费,彻底净除环境,以便于下次部署。
  • 阿里云ROS提供了最常见的网站,ML架构,最佳实践,方便您尽快地进行测试、验证或建立产品雏形。
  • 最佳实践之基础设施代码化(Infrastructure as Code,IaC)完成度最高且依赖最少的免费服务。(本文介绍的重点)
  • 所有操作都集成访问控制(RAM)和操作审计(ActionTrail),确保基础设施的安全。

资源编排服务ROS的CI/CD最佳实践

常见问题 —— 只用到了Infrastructure as Code的10%

一般的用户在使用资源编排ROS时,只用到ROS的创建云资源过程,这类用户通常参考了一个部署架构示例,然后在ROS的控制台上,或通过ALIYUN CLI,根据此模板创建一个资源栈,即一组根据模板定义所创建出来的资源的组合叫做资源栈(简称Stack),然而在日后的维护过程中,却不再通过修改模板加更新堆栈的方式进行云资源的维护,这样即无法享受到ROS所带来的全部优点 —— 即基础设施代码化(Infrastructure as Code,IaC)。

上面提到的ROS的优点和场景,更多的是从模板化,标准化和可复用化的角度来讲的,这里还将补充代码化带来的好处。

基础设施代码化(Infrastructure as Code)和集成CI/CD的好处

像Review代码一样Review基础设施的模板

总所周知,源代码的管理理论和工具都已经非常成熟,无论是国内外,从创业公司到大型企业,都在使用代码版本管理软件,其中又以Git(以下直接用Git举例)为当今的网红工具。将基础设施模板化,然后再代码化,也是让模板享受和代码一样的流程,这里用了一个简化的git flow(或Github flow)来进行示意:

image.png

模板代码化以后,也需要经历Code Review和测试这样的自动化CICD集成,Code Review以及Git merge这类的流程可以最大程度上保证模板template的正确性,实际的工作中,有些公司在改变系统环境时根本都不审批,即使有些公司有审批工具,其功能的完善程度也很难和Git媲美,Git可以进行模板内容的diff比较,可以回滚,可以有一个统一的t版本号或tagging,可以集成到Pipeline中等等。

将ROS集成到持续部署(CD)中

一般来说,当基础设施(环境)需要变更时,往往需要先变更环境,然后再部署系统(应用)。如果应用的部署发生在环境变更之前,则会导致应用部署失败或不正常工作,因为应用的依赖性还不存在,如新创建了一个数据表。所以,一般来说,都先进行环境的变更,然后再进行应用的变更。

这里要求Pipeline有能力调用资源编排ROS进行部署,当Pipeline检测到ROS模板有变化后,应该调用ROS服务将变更落实到环境中,并且Pipeline有能力把staging的参数传递给ROS,即可使用同一份模板部署多个环境,多个地域,如下图所示。

image.png

一个比较完整的示例流程

该文在最前面的图片,主要展示了基础设施模板的工作流,其他的步骤有所简化,在具体的实施过程,可以有所区别,最大的区别莫过于是选择同一代码库还是将基础设施模板和代码分别放置在2个不同的代码库中,两种方式各有利弊,分别2个代码库时,Pipeline更容易检测是基础设施模板发生了变化还是代码发生了变化。放在一起时,更容易实现整体的蓝绿部署,更加地体现了基础设施和代码构成的整体的一致性,方便整体部署和整体回滚。

始终保持基础设施模板和环境的一致性

有些情况你需要手工去修改环境,如某个故障发生时,此时将造成模板和实际环境的不一致,ROS正在开发的偏差探测(Drift Detection)功能将会提醒存在这种不一致,等到故障出来完毕之后,正确的做法应该同时修改模板,测试模板,然后再次部署一次,如果ROS发现环境已经和模板是一致时,将不会再次修改环境,这是ROS的基本工作原理。但是为了确保ROS的工作方式符合预期,请在测试环境和预发环境进行测试,部分云资源的行为存在少许差异。

一旦基础设施的模板和实际环境发生了偏差,而又不去修正模板,使其和实际环境保持一致时,该文所描述的种种好处将全部消失,即造成了模板和环境之间的中断,偏差累积越多,中断得越是厉害,最终导致模板彻底没用了。

相关实践学习
使用ROS创建VPC和VSwitch
本场景主要介绍如何利用阿里云资源编排服务,定义资源编排模板,实现自动化创建阿里云专有网络和交换机。
阿里云资源编排ROS使用教程
资源编排(Resource Orchestration)是一种简单易用的云计算资源管理和自动化运维服务。用户通过模板描述多个云计算资源的依赖关系、配置等,并自动完成所有资源的创建和配置,以达到自动化部署、运维等目的。编排模板同时也是一种标准化的资源和应用交付方式,并且可以随时编辑修改,使基础设施即代码(Infrastructure as Code)成为可能。 产品详情:https://www.aliyun.com/product/ros/
相关文章
|
6月前
|
运维 监控 测试技术
自动化运维实践:CI/CD流程详解
【6月更文挑战第30天】CI/CD实践推动软件开发自动化,通过持续集成确保代码质量,自动部署提升交付速度。核心流程包括:代码管理(Git等)、自动化构建与测试、代码审查、部署。关键点涉及选择工具、测试覆盖率、监控及团队协作。采用CI/CD能减少错误,但需应对挑战,如工具选型、全面测试和团队沟通。
|
2月前
|
运维 监控 jenkins
运维自动化实战:利用Jenkins构建高效CI/CD流程
【10月更文挑战第18天】运维自动化实战:利用Jenkins构建高效CI/CD流程
|
2月前
|
缓存 监控 测试技术
掌握容器化持续集成/持续部署(CI/CD)的最佳实践
【10月更文挑战第8天】本文介绍了容器化持续集成/持续部署(CI/CD)的最佳实践,涵盖容器化CI/CD的概念、优势和实施步骤。通过使用容器技术,可以实现环境一致性、快速迭代和易于扩展,提高软件开发的效率和可靠性。文章还详细讨论了编写高效的Dockerfile、自动化测试、安全性、监控和日志管理等方面的最佳实践。
|
2月前
|
运维 监控 jenkins
运维自动化实践:利用Jenkins实现高效CI/CD流程
【10月更文挑战第18天】运维自动化实践:利用Jenkins实现高效CI/CD流程
|
4月前
|
Kubernetes jenkins 持续交付
Kubernetes CI/CD 集成:持续交付的最佳实践
【8月更文第29天】随着微服务架构和容器化的普及,Kubernetes 成为了运行容器化应用的事实标准。为了确保应用能够快速迭代并稳定发布,持续集成/持续部署(CI/CD)流程变得至关重要。本文将介绍如何将 Kubernetes 集成到 CI/CD 流程中,并提供一些最佳实践。
343 1
|
4月前
|
运维 监控 jenkins
自动化运维实践:构建高效的CI/CD流程
【8月更文挑战第31天】在软件开发的海洋中,持续集成和持续交付(CI/CD)是推动现代开发实践的强大潮流。本文将带你潜入这股潮流之下,探索如何构建一个高效且灵活的自动化运维流程,以提升软件交付的速度与质量。我们将从基础工具的选择到流程设计,再到实际操作的技巧,逐步展开讨论,并结合代码示例,使理论与实践紧密结合。
|
6月前
|
监控 jenkins 测试技术
持续集成/持续部署(CI/CD)的最佳实践
【6月更文挑战第19天】CI/CD最佳实践概括: 确定CI(集成早期发现错误)和CD(自动化部署)概念,选择适配团队的工具如Jenkins、GitLab CI;编写自动化测试,确保每次提交时运行;实行代码审查和质量检查;自动化构建与部署,利用容器技术;建立监控与反馈机制,快速响应问题;采用分支策略如特性分支和拉取请求;持续学习与改进流程,优化效率和质量。
|
6月前
|
监控 Java 持续交付
构建Java微服务架构的CI/CD流程
构建Java微服务架构的CI/CD流程
|
7月前
|
监控 jenkins 测试技术
构建健壮的CI/CD流程:策略与实践
【5月更文挑战第15天】构建健壮的CI/CD流程对于提升开发效率和软件质量至关重要。核心价值包括自动化构建、测试和部署,降低风险,及保证质量。选择适合团队的CI/CD工具,定义清晰阶段和任务,实现自动化,并确保流程的可靠性和稳定性。实践策略包括代码质量检查、全面测试、监控反馈和持续改进。通过这些方法,团队能更专注于核心功能开发,实现高效、高质量的软件交付。
|
7月前
|
运维 Kubernetes PHP
构建高效自动化运维体系:基于容器技术的CI/CD实践深入理解PHP中的命名空间
【5月更文挑战第27天】在现代软件交付过程中,持续集成(CI)与持续部署(CD)已成为提升开发效率、保障产品质量的重要手段。本文旨在探讨如何利用容器技术实现CI/CD的自动化流程,从而构建一个高效的自动化运维体系。通过分析容器技术的核心优势和CI/CD流程的关键要素,我们提出了一种结合Docker、Kubernetes等工具的实践方案,并详细阐述了从代码提交到最终部署的全过程自动化实现方法。 【5月更文挑战第27天】在现代PHP开发中,命名空间是一个不可或缺的功能,它解决了代码库增长时可能出现的类名和函数名冲突问题。本文将深入探讨PHP命名空间的核心概念、实现原理及其在实际项目中的应用,帮助

热门文章

最新文章