Ansible 如何更快地实现大型代码库的terraform连续部署?

Ansible 如何更快地实现大型代码库的terraform连续部署?,ansible,continuous-integration,terraform,continuous-deployment,Ansible,Continuous Integration,Terraform,Continuous Deployment,我们拥有terraform和ansible中的大型基础架构代码库。有些任务需要进行小的更改,如添加/修改角色/剧本。但是,合并请求会运行并部署整个阶段:1)配置虚拟机>2)安装软件>3)使用playbook更改配置虚拟机 第二步的问题是,每次都要花大量的时间才能真正运行剧本 我很想了解一种更好的CD方式,谢谢。您将基础设施作为代码,配置作为代码。将Ansible和Terraform分开是一种很好的模式。所以第一条规定是使用地形。然后使用Ansible进行配置。Terraform和Ansible之

我们拥有terraform和ansible中的大型基础架构代码库。有些任务需要进行小的更改,如添加/修改角色/剧本。但是,合并请求会运行并部署整个阶段:1)配置虚拟机>2)安装软件>3)使用playbook更改配置虚拟机

第二步的问题是,每次都要花大量的时间才能真正运行剧本


我很想了解一种更好的CD方式,谢谢。

您将基础设施作为代码,配置作为代码。将Ansible和Terraform分开是一种很好的模式。所以第一条规定是使用地形。然后使用Ansible进行配置。Terraform和Ansible之间应该是分离的。

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

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


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

terraform与这三个步骤有什么关系?提供虚拟机。那么,如果步骤1涉及terraform,但步骤2是实际问题,那么terraform到底有什么问题?什么是“大型代码库”,什么是“大量时间”?“安装软件”意味着什么?我们希望在数据库虚拟机上安装节点导出器,以便导出器剧本被推送到repo,并在虚拟机配置和安装软件(MySQL DB)后进行部署,这些阶段大约需要74分钟才能完成。我只是在寻找一种更好的方法来测试导出程序,而无需在每次提交导出程序角色的更改时都执行前面的步骤。感谢Mohammed,管道将首先配置机器,然后进行配置。你是说这两个地方都在不同的回购协议?ansible playbooks中的更改会触发管道来执行terraform以提供虚拟机并对其进行配置,我们希望添加一个playbook来在虚拟机上安装节点导出器,因此为了测试它,似乎我们每次都必须从一开始就触发管道,我想知道是否有更好的方法。谢谢Martin,这回答了我的问题。