如何组织Bento - Veewee - Vagrant项目

时间:2013-10-23 15:16:28

标签: vagrant veewee bento

我正在尝试使用Bento,Veewee和Vagrant来自动化配置VM的过程。这种方法有很多希望简化开发,开发测试和QA流程。

(对于那些没有遇到过这些问题的人--Vagrant可以很容易地在Virtual Box,VMWare,EC2等中快速设置/拆除虚拟机; Veewee简化了为Veewee构建基本盒的过程;并且Bento简化了定义基本框然后自动运行Veewee的过程。

问题是,Bento,Veewee和Vagrant之间的相互关系令人困惑。许多定义文件和一些操作都是跨层重复的,并且不清楚哪个层应该获取特定于我的项目的更新。 Ruby环境也使这很复杂 - 看起来像Bento命令都需要从Bento目录运行,所以盒子和盒子其他文件最终会出现在不合逻辑的地方。

任何人都可以建议文件布局&使用这种工具组合的工作流程?

2 个答案:

答案 0 :(得分:4)

我正在回答我自己的问题,以捕捉我发现的东西。


有一种方法可以让Bento,Veewee,Vagrant和Ruby以半合理的方式协同工作,但这很复杂。最好使用最新版本的Bento,将Veewee替换为Packer工具。

Packer或多或少地做了Veewee所做的事情,但做了一些很大的改进,包括:

  1. 每个Packer框定义都在一个JSON文件中,该文件引用一个平面的脚本文件列表 - 不再是三层带符号链接的文件;更容易理解,更好的源代码控制。

  2. Packer二进制文件是OS本机可执行文件(不再使用Ruby)。您可以通过将它们放在路径上的某个位置来部署它们(例如Linux上的/ usr / local / bin)。 Packer避免了Ruby疯狂。


  3. 这是一个简单的工作流程:

    1. 安装VirtualBox。安装Bento。 Bento还将安装Vagrant作为Ruby宝石;但我们不会使用Vagrant的那个例子。使用适用于您的操作系统的本机安装程序单独安装Vagrant。

    2. 选择要在dir& amp;中使用的项目名称。文件名。 (对于这个例子,我正在使用“CUSTOM”)。在bento / packer / scripts目录中创建一个空子目录。我做了mkdir CUSTOM

    3. 查看... / bento / packer中的.JSON文件。你可以就地改变一个,或者复制一个和另一个可能更明智。改变那个。我做了cp centos-6.4-x86_64.json centos-6.4-x86_64-CUSTOM.json

    4. 编辑该文件的“构建器”部分以更改VM的磁盘大小,RAM大小,ssh端口等。

    5. 编辑“供应商”部分,“输出”行,为要创建的文件夹文件提供有意义的名称。 (对于这个例子,我正在使用“BOXFILE”)。请注意,您可以嵌入{{timestamp}}以将Unix时间戳添加到文件名中 - 有助于使文件名唯一。

    6. 编辑该文件的“provisioners”部分,以引用您希望在Packer构建序列中运行的任何脚本(按顺序)。这通常是Packer已经提供的脚本的组合,以及为自定义目的而构建的其他脚本。

    7. 我使用的方法如下:

      "provisioners": [
      {
        "execute_command": "echo 'vagrant' | {{.Vars}} sudo -S -E bash '{{.Path}}'",
        "scripts": [
          "scripts/common/sshd.sh",
          "scripts/common/vagrant.sh",
          "scripts/common/vmtools.sh",
          "scripts/CUSTOM/reso_1024x768.sh",
          "scripts/CUSTOM/prompt_cwd.sh",
          "scripts/CUSTOM/standard_dirs.sh",
          "scripts/CUSTOM/standard_utils.sh",
          "scripts/CUSTOM/python27.sh",
          "scripts/CUSTOM/supervisord.sh",
          "scripts/CUSTOM/ruby.sh",
          "scripts/centos/cleanup.sh",
          "scripts/common/minimize.sh"
        ],
        "type": "shell"
      }
      

      注意我的自定义脚本都会在清理之前出现并最小化步骤 - 这很重要。

      1. 从bento / packer目录运行packer build -only=virtualbox centos-6.4-x86_64-CUSTOM.json。如果以前没有下载VirtualBox guest虚拟机加载项和基本操作系统的磁盘映像(ISO),它们将是现在;这些文件很大,所以这一步可能需要一段时间。

      2. Packer使用VirtualBox创建临时VM,并在其上运行所有指定的脚本。完成此过程后,将使用您在上面指定的BOXFILE名称在bento / builds / visualbox目录中捕获VM的副本,Packer将丢弃VirtualBox VM。

      3. 使用Vagrant注册刚刚构建的框。使用单独安装的Vagrant版本(例如,您可能必须指定/ usr / local / bin / vagrant或适用于您的操作系统的任何版本),执行vagrant box add CUSTOM path/to/BOXFILE。这将在〜/ .vagrant.d / boxes / CUSTOM / VirtualBox中创建一个新的子目录,其中包含Vagrant需要根据此框定义创建VM的文件。

      4. 创建一个Vagrant项目目录并cd进去。我做了mkdir ~/test; cd ~/test

      5. 使用此框初始化Vagrant项目:vagrant init CUSTOM

      6. 启动虚拟机:vagrant up

      7. 连接到VM:vagrant ssh

      8. 此时,你正常使用Vagrant而Bento / Packer不再参与 - 他们的合并工作就是创建基本框,一旦注册了Vagrant,Vagrant就会独立。


        还有很多其他有趣的东西要看:Vagrant,比如特殊的vagrant-aws插件,以及如何将它与Chef,Puppet或Ansible一起使用......但是我会在这里停止,因为我原来的问题已经回答了

答案 1 :(得分:1)

听起来你似乎想要应用Bento,Vagrant和/或Veewee来提供& amp;在盒子上进行QA测试。感谢大家和Chef背后的社区,已经存在一个工具,可以完全按照您的要求进行操作!

它被称为test-kitchen。您可以将它与OpsCode / Chef维护并使用Packer构建的预构建Chef Bento Boxes一起使用。如果您只想进行配置/测试,则无需使用VeeWee或Packer从头开始构建Vagrant盒或VM映像。

Test Kitchen是一个测试工具,用于执行配置代码(ChefAnsiblePuppetSaltStackBash / Powershell来自{{1隔离的一个或多个平台上的}或bootstrap.sh)。它使用驱动程序插件架构,允许您将其插入各种云提供程序和虚拟化技术,例如Amazon EC2Blue BoxCloudStackDigital OceanRackspaceOpenStackVagrantDockerLXC containersVMWare VSphereGoogle Compute EngineAzure等等。还有" busser"测试插件,允许对多个测试框架进行可插拔支持,包括BatsshUnit2RSpecServerspecShpecTox,{{3 }},Nose2MiniTestCucumber,正在创建其他人。

对于Chef,Puppet和Ansible工作流程,支持食谱依赖性解析器工具,例如AnsibleSpecBerkshelfLibrarian-ChefLibrarian-PuppetAnsible Galaxy或您只需拥有一个bootstrap.ps1目录,Test Kitchen将知道该怎么做。如果您已经在使用Chef社区烹饪书,那么Test Kitchen集成测试已经包含在许多内容中,例如MySQL,nginx,Chef Server和runit cookbooks。

它非常灵活,对于您的用例,您可以通过选择正确的宝石插件集来使其达到您想要的效果。因为它来自Chef社区,所以您可能拥有使用Chef cookbook,Vagrant驱动程序以及ServerSpec或Bats测试插件的最佳体验。然而,它作为CI& amp; QA测试工具拥有许多可用的社区插件。

如果您有兴趣了解其中的内容,只需在RubyGems中搜索cookbooks/kitchen-以获取更多选项。

如果您不熟悉Ruby,Chef或所有这一切......一个简单的入门方法是安装Librarian-Ansible,其中包括busser-,{{1 },test-kitchen和基本/ Chef.io支持的测试工具。

一旦你拥有了这个,如果你喜欢冒险或想要尝试替代的可插拔配置程序,驱动程序和总线插件,你可以将任何安装到 ChefDK Ruby环境中(使用Mac OS X / Unix的示例)使用以下命令:

knife

如果您想使用我为测试Ansible playbooks / roles而创建的演示存储库,请查看ChefDK