如何更快地进行大型代码库的持续部署?



我们在terraform和ansible中有一个很大的基础架构代码库。有些任务需要一些小的改变,比如添加/修改角色/剧本。然而,合并请求运行和部署1)配置vm>2)安装软件;3)配置虚拟机与剧本的变化。

步骤2的问题是,每次在真正运行剧本之前,它都需要花费大量的时间来完成。

我很想学习一种更好的CD方法,谢谢。

对于您所描述的情况,一种常见的方法是预构建已经包含运行时所需软件的自定义虚拟机映像,然后最后的配置步骤可以只关注添加只能在运行时学习的任何最终配置设置,例如虚拟机中的软件可能依赖的某些其他服务的网络位置。

实现此目的的一种方法是在单独的构建步骤中使用HashiCorp Packer从已经可用的基本映像派生自定义机器映像。Packer可以选择运行Ansible作为准备映像的一种方式,因此如果您已经将软件安装步骤(步骤2)定义为Ansible剧本,那么您可以使用步骤的子集作为机器映像步骤,然后让您现有的步骤3再次运行Ansible,只是为了完成运行的机器。

这种方法只有在创建新VM比更改要安装的软件更频繁的情况下才有效,因为它依赖于分摊跨多个VM引导构建映像的成本的能力。如果每次更改都需要更改已安装的软件,那么实际上没有任何通用的优化方法,因为您只能更改执行步骤的顺序,而不能更改每个步骤运行的频率。

您正在将基础设施作为代码和配置作为代码组合。将Ansible和Terraform分开是一个很好的模式。第一个条款是使用Terraform。然后使用Ansible进行配置。在Terraform和Ansible之间应该有一个解耦。

相关内容

最新更新