首页 文章

如何从本地VirtualBox / Vagrant开发环境完成 生产环境 部署?

提问于
浏览
35

最近我开始阅读有关使用虚拟化软件构建开发环境(我是初学者)的看法,并且“基础架构作为代码”似乎是一个非常强大的概念 .

我非常喜欢描述here的工作流程结构:

  • 团队周围使用相同的基础VirtualBox图像

  • Vagrant用于快速'build up'和'provision'这样的图像到所需的配置借助于

  • Chef(或Puppet)食谱,这是唯一需要置于版本控制之下的代码片段 .

但是,我仍然不太明白如何在 生产环境 服务器上传输和部署代码 .

据我所知,保持DEV和PROD环境相同的常用方法是将Production服务器实例管理为另一个要使用Chef配置的虚拟映像 . 我可以在Production服务器上安装完全相同的操作系统,因为我(和团队)每天都使用VirtualBox-Vagrant-Chef .

但是, 生产环境 服务器可能具有与虚拟客户机操作系统中的硬件不同的硬件,这可能会再次导致不一致 .

So, here is the question:

从使用VirtualBox-Vagrant-Chef工具链管理的开发环境向 生产环境 服务器传输和部署代码的已知和常见最佳做法是什么?这种做法是否允许任何持续部署?

[编辑]:注意:是否有任何操作在 生产环境 服务器上运行与Chef / Vagrant配置的相同VM实例,就像在diagram上描述的那样?

2 回答

  • 22

    我是你链接的文章的作者,所以我的0.02

    如果我正确理解了您的问题,您不会将vms从dev移动到 生产环境 ,您可以创建一个可重复的过程,允许您一次又一次地创建相同的结束状态(OS配置应用程序),无论目标位于何处 .

    通过使用vagrant,您可以保证您的开发人员使用与 生产环境 服务器使用相同的操作系统,无论他们使用哪种操作系统进行开发 .

    使用Puppet / Chef可以保证操作系统的配置相同,无论它是在带有Vagrant的vm, 生产环境 中的虚拟机, Cloud 虚拟机还是裸机硬件中运行 . 它不需要是虚拟的 .

  • 1

    对于Puppet(Chef也很可能也这样做),你可以 Build 清单(配方),使它们在你的流浪环境中表现不同,例如:

    if $::virtual != "virtualbox" { # not in vagrant
        include sysctl_tuning
    }
    

    在这种情况下,关于持续交付的问题有点过于宽泛 . 我认为答案将是“是”,因为它的 Value .

相关问题