想要提高您的DevOps效率?将基础架构视为CI流程的重要组成部分。持续交付(CD)和持续集成(CI)是DevOps的两个众所周知的方面。但是在CI如此火爆的今天,另一个关键的I却被忽略了:infrastructure基础设施。曾几何时,“基础设施”意味着无头黑匣子、笨重的服务器和高耸的机架——更不用说冗长的采购流程和对超额负载的错误计算了。后来到了虚拟机时代,基础设施处理的很好,虚拟化——以前的世界从来不是这样的。我们不再需要服务器来管理实体。只需单击一下,我们就可以创建和销毁、启动和停止、升级和降级我们的服务器。有一个关于银行的流行故事:他们走向数字化并引入在线表格,用户可以手动填写、打印并邮寄回银行。这就是我们今天的基础设施所发生的事情:使用新技术来做与以前相同的事情。在本文中,我们将探讨基础架构管理方面的进步,将基础架构视为版本化组件,并尝试探索不可变服务器的概念。在后面的文章中,我们将研究如何使用开源工具来实现持久性基础设施。实践中的持续集成过程这就是我们熟悉的CI,早发布、常发布的循环过程。这个过程缺少一个关键组成部分:基础设施。突击测验:您如何创建和升级您的基础设施?您如何控制和跟踪基础设施变更?您的基础设施如何与您的业务相匹配?您如何确保在正确的基础架构配置上进行测试?要回答这些问题,就需要了解持续基础设施continuousinfrastructure。将CI构建过程分为代码持续集成代码(CIc)和基础设施持续集成基础设施(CIi),并行开发构建代码和基础设施,然后将两者集成在一起进行测试。将基础架构构建视为CI流程的重要组成部分。包含持续基础设施的CI过程定义了CIi的几个方面:代码基础设施架构是通过代码创建的,而不是通过安装。基础架构即代码基础架构即代码(IaC)是使用配置脚本创建基础架构的现代最佳方式。这些脚本遵循典型的编码和单元测试周期(有关Terraform脚本的示例,请参见下文)。版本IaC组件在源代码存储库中进行版本控制。这为基础设施提供了版本控制的所有好处:一致性、可追溯性、分支和标记。管理通过编码和版本化的基础架构管理,您可以使用熟悉的测试和发布流程来管理基础架构开发。CIi提供以下优势:一致性一致性版本化和标记化的基础设施意味着您可以清楚地知道您的系统使用了哪些组件和配置。这为识别和管理基础架构一致性建立了非常好的DevOps实践。ReproducibilityReproducibility通过基础设施的标记和基线,重建基础设施非常容易。想想你有多少次听到这样的话:“但它在我的机器上工作!”现在,您可以在本地测试台中快速重现类似生产的环境,让环境成为调试过程中的变量。删除。TraceabilityTraceability你还记得有多少次你必须找出谁更改了文件夹权限,或者谁升级了ssh包吗?编码、版本化和发布的基础架构消除了临时更改,并为基础架构管理带来了可追溯性和可预测性。自动化自动化有了可脚本化的基础设施,自动化是下一个合乎逻辑的步骤。自动化允许您按需创建基础设施并在您用完它时销毁它,这样您就可以将更多宝贵的时间和精力花在更重要的任务上。ImmutabilityCIi带来了诸如不可变基础设施之类的创新。您可以创建一个新的基础设施组件而不是升级(请参阅下面关于不可变基础设施的注释)。持续基础设施是从运行基础环境到运行基础组件的演进。就像编写代码一样,通过经过验证的DevOps流程来完成。这种对传统CI的重新定义包括缺少的“i”以形成连贯的CD。(CIc+CIi)=CI->CD基础设施即代码(IaC)CIi流程的关键推动因素是基础设施即代码(IaC)。IaC是一种使用配置文件创建和升级基础设施的机制。这些配置文件像任何其他代码一样开发,并使用版本管理系统进行管理。这些文件遵循一般的代码开发流程:单元测试、提交、构建和发布。IaC流程具有版本控制为基础架构开发带来的所有好处,例如标记、版本一致性和变更的可追溯性。下面是一个简单的Terraform脚本示例,用于在AWS上创建两层基础设施,包括虚拟私有云(VPC)、弹性负载(ELB)、安全组和NGINX服务器。Terraform是一种开源工具,用于通过脚本创建和更改基础设施。Terraform脚本创建一个两层架构设施的简单示例。有关完整脚本,请参阅GitHub。不可变的基础架构您有多个正在运行的虚拟机需要使用安全补丁进行更新。一种常见的做法是推送一个远程脚本来单独更新每个系统。在不更新旧系统的情况下,如何简单地丢弃它们并部署安装了新安全补丁的新系统?这是不可变的基础设施不可变的基础设施。因为以前的基础设施是版本化和标记的,所以安装补丁只是更新脚本并将其推送到发布过程中的问题。现在你知道为什么说基础设施在CI过程中特别重要了吗?
