Vagrant 如何组织Bento-Veewee流浪项目

Vagrant 如何组织Bento-Veewee流浪项目,vagrant,veewee,bento,Vagrant,Veewee,Bento,我正在尝试使用Bento、Veewee和Vagrant来自动化配置VM的过程。这种方法在简化开发、开发测试和QA过程方面有很大的潜力 (对于那些没有遇到过这些问题的人——Vagrant使在Virtual Box、VMWare、EC2等中快速设置/拆除虚拟机变得容易;Veewee简化了为Veewee构建基本盒的过程;Bento简化了定义基本盒的过程,然后使Veewee的操作自动化) 问题是,Bento、Veewee和Vagrant之间的相互关系令人困惑。许多定义文件和一些操作是跨层复制的,不清楚哪

我正在尝试使用Bento、Veewee和Vagrant来自动化配置VM的过程。这种方法在简化开发、开发测试和QA过程方面有很大的潜力

(对于那些没有遇到过这些问题的人——Vagrant使在Virtual Box、VMWare、EC2等中快速设置/拆除虚拟机变得容易;Veewee简化了为Veewee构建基本盒的过程;Bento简化了定义基本盒的过程,然后使Veewee的操作自动化)

问题是,Bento、Veewee和Vagrant之间的相互关系令人困惑。许多定义文件和一些操作是跨层复制的,不清楚哪个层应该获得特定于我的项目的更新。Ruby环境也使这一点变得非常复杂——似乎Bento命令都需要从Bento目录运行,所以Box和其他文件最终会出现在不合逻辑的地方


有人能为使用这些工具组合提供一个文件布局和工作流程吗?

我正在回答我自己的问题,以获取我的发现


有一种方法可以让Bento、Veewee、Vagrant和Ruby以一种半理性的方式一起工作,但这很复杂。最好使用最新版本的Bento,用封隔器工具代替Veewee

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

  • 每个包装盒定义都在一个JSON文件中,该文件引用一个简单的脚本文件列表——不再是三层带有符号链接的文件;更容易理解,更好地进行源代码控制

  • 打包程序二进制文件是操作系统本机可执行文件(不再使用Ruby)。通过将它们放在路径上的某个位置(如Linux上的/usr/local/bin)来部署它们。帕克避免了红宝石的疯狂


  • 以下是一个简单的工作流程:

  • 安装VirtualBox。安装便当。Bento还将安装Vagrant作为红宝石;但我们不会用那个流浪汉的例子。使用本机安装程序为您的操作系统单独安装Vagrant

  • 为项目选择一个名称以在目录和文件名中使用。(在本例中,我使用“CUSTOM”)。在bento/packer/scripts目录中创建一个空子目录。我做了
    mkdir定制

  • 查看…/bento/packer中的.JSON文件。你可以在适当的地方修改一个,或者复制一个并修改它可能更明智。我做了
    cp centos-6.4-x86_64.json centos-6.4-x86_64-CUSTOM.json

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

  • 编辑“provisioners”部分的“output”行,为要创建的box文件提供有意义的名称。(在本例中,我使用的是“BOXFILE”)。注意,您可以嵌入
    {{timestamp}}
    以向文件名添加Unix时间戳,这有助于使文件名唯一

  • 编辑该文件的“provisioners”部分,以引用要在打包程序构建序列中运行的任何脚本(按顺序)。这通常是Packer已经提供的脚本的组合,加上为自定义目的而构建的任何其他脚本

  • 我使用的方法如下所示:

    "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"
    }
    
    请注意,我的自定义脚本都出现在清理和最小化步骤之前——这一点很重要

  • 在bento/packer目录中,运行
    packer build-only=virtualbox centos-6.4-x86_64-CUSTOM.json
    。如果VirtualBox来宾加载项和基本操作系统的磁盘映像(ISO)以前没有下载过,那么现在就可以下载了;这些文件很大,因此此步骤可能需要一些时间

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

  • 注册你刚和Vagrant建立的盒子。使用单独安装的Vagrant版本(例如,您可能必须指定/usr/local/bin/Vagrant或适用于您的操作系统的任何版本),执行
    Vagrant框添加自定义路径/to/BOXFILE
    。这将在~/.vagrant.d/box/CUSTOM/VirtualBox中创建一个新的子目录,其中包含vagrant根据此框定义创建VM所需的文件

  • 创建一个Vagrant项目目录并将cd放入其中。我做了
    mkdir~/测试;cd~/test

  • 使用以下框初始化Vagrant项目:
    Vagrant init CUSTOM

  • 启动虚拟机:
    vagrant up

  • 连接到虚拟机:
    vagrant ssh

  • 此时,您正在正常使用Vagrant,Bento/Packer不再参与其中——他们的联合工作只是创建basebox,一旦向Vagrant注册,Vagrant就独立了



    还有很多其他有趣的东西要看re:Vagrant,比如特别的Vagrant aws插件,以及如何与Chef、Puppet或Ansible一起使用它。。。但既然我原来的问题得到了回答,我就到此为止。

    听起来你想用便当、流浪汉和/或Veewee来供应和执行箱子的QA测试。多亏了背后的人们和社区,一个工具已经存在,可以精确地完成您想要做的事情

    它叫。您可以将其与OpsCode/Chef维护并使用Packer构建的预构建一起使用。如果您只想进行资源调配/测试,则无需使用VeeWee或Packer从头开始构建Vagrant Box或VM映像

    Test Kitchen是一种测试工具,用于在一个或多个平台上单独执行配置代码(在、或通过
    bootstrap.sh
    bootstrap.ps1
    )。它使用了一个驱动程序插件体系结构,可以将其插入各种云提供商和虚拟化技术中,如、、、、等
    $(/opt/chefdk/bin/chef shell-init $(basename $SHELL))
    sudo /opt/chefdk/embedded/bin/gem install $kitchen_plugin_gem_name_here