首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何组织Bento - Veewee - Vagrant项目

如何组织Bento - Veewee - Vagrant项目
EN

Stack Overflow用户
提问于 2013-10-23 15:16:28
回答 2查看 977关注 0票数 4

我正在尝试使用Bento、Veewee和Vagrant来自动化提供VM的过程。这种方法对于简化开发、开发测试和QA过程有很大的希望。

(对于那些没有遇到这些问题的人-- Vagrant使在Virtual、VMWare、EC2等中快速建立/拆卸VM变得容易;Veewee简化了为Veewee构建基础框的过程;Bento简化了定义基框的过程,然后自动化了Veewee的操作)。

问题是,本托、维维和瓦格兰特之间的相互关系令人困惑。许多定义文件和一些操作都是跨层重复的,并且不清楚哪一层应该得到特定于我的项目的更新。Ruby环境也使这件事复杂化了很多--似乎所有的Bento命令都需要从Bento目录中运行,所以lot &其他文件最终会出现在不合逻辑的地方。

有人能建议使用这种工具组合的文件布局和工作流吗?

EN

回答 2

Stack Overflow用户

发布于 2013-10-23 19:49:32

我在回答我自己的问题来捕捉我的发现。

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

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

  1. 每个Packer框定义都位于一个JSON文件中,该文件引用了一个简单的脚本文件列表--不再是有符号链接的三层文件;更容易理解,也更适合源代码控制。
  2. Packer二进制文件是OS-原生可执行文件(不再是Ruby中的)。您可以通过将它们放置在您的路径上(比如/usr/local/bin在Linux上)来部署它们。Packer避免了Ruby的疯狂。

下面是一个简单的工作流:

  1. 安装VirtualBox。安装本托。Bento也会将Vagrant安装为Ruby;但是我们不会使用Vagrant的实例。使用操作系统的本机安装程序单独安装Vagrant。
  2. 选择要在dir &文件名中使用的项目名称。(在本例中,我使用的是“定制”)。在bento / packer /script目录中创建一个空子目录。我做了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. 编辑"provisioners“部分"output”行,为要创建的框文件提供有意义的名称。(在本例中,我使用的是"BOXFILE")。请注意,您可以嵌入{{timestamp}}以在文件名中添加Unix时间戳--帮助使文件名成为唯一。
  6. 编辑该文件的"provisioners“部分,以引用您希望在Packer构建序列中运行的任何脚本(按顺序排列)。这通常是Packer已经提供的脚本的组合,再加上您为自定义目的构建的任何其他脚本。

我使用的方法如下:

代码语言:javascript
复制
"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来宾插件和基本操作系统的磁盘映像(ISO),它们现在就会下载;这些文件很大,所以这一步可能需要一段时间。
  2. Packer使用VirtualBox创建临时VM,并在其上运行所有指定的脚本。完成此过程后,将使用前面指定的盒文件名在bento / builds / visualbox目录中捕获VM的副本,并且Packer将丢弃VirtualBox VM。
  3. 注册你刚用Vagrant建造的盒子。使用单独安装的Vagrant版本(例如,您可能必须指定/usr/local/bin/迷走符或任何适合您的操作系统的内容),执行vagrant box add CUSTOM path/to/BOXFILE。这将在~/ .vagrant.d / box / CUSTOM / VirtualBox中创建一个新的子目录,其中Vagrant需要从这个框定义创建VM。
  4. 创建一个Vagrant目录,并将cd放入其中。我做了mkdir ~/test; cd ~/test
  5. 使用下面的框:vagrant init CUSTOM初始化一个Vagrant项目
  6. 启动VM:vagrant up
  7. 连接到VM:vagrant ssh

此时,您正在正常使用Vagrant,而Bento / Packer不再涉及--他们的联合工作只是创建一个基箱,一旦在Vagrant注册,Vagrant就会单独存在。

还有很多其他有趣的事情要看:流浪汉,像特殊的流浪者-aws插件,以及如何使用它与厨师,木偶或Ansible .不过,既然我原来的问题已获答覆,我便会在此停止发言。

票数 4
EN

Stack Overflow用户

发布于 2015-10-22 17:15:48

听起来你想要应用Bento,Vagrant和/或Veewee来提供和执行盒子上的QA测试。多亏了厨师背后的人们和社区,已经有了一个工具来完成您想要做的事情!

它叫test-kitchen。您可以将它与预构建的本托大厨盒一起使用,OpsCode/Chef维护它,并使用Packer构建它。如果您只想进行配置/测试,就不需要从头开始使用VeeWee或Packer构建Vagrant或VM映像。

Test是一种测试工具,用于在一个或多个平台上单独执行供应代码(在厨师可抗木偶SaltStackBash / Powershell中通过bootstrap.shbootstrap.ps1)。它使用驱动程序插件架构,允许您将其插入各种云提供商和虚拟化技术中,如亚马逊EC2蓝盒CloudStack数字海洋RackspaceOpenStack流浪汉DockerLXC集装箱VMWare VSphereGoogle计算引擎Azure等等。还有"busser“测试插件,允许对多个测试框架(包括蝙蝠shUnit2RSpecServerspecShpec毒理Nose2MiniTest黄瓜AnsibleSpec )提供可插拔的支持,并创建其他测试框架。

对于Chef、Puppet和Ansible工作流,支持菜谱依赖解析器工具(如伯克托图书馆员-主厨图书馆员-木偶不稳定星系图书管理员 ),或者您只需拥有cookbooks/目录,Test就知道该做什么。如果您已经在使用Chef社区菜谱,那么Test集成测试已经包含在许多MySQL、nginx、Chef和runit菜谱中。

它非常灵活,对于您的用例,您可能可以通过选择正确的宝石插件集来让它做您想做的事情。因为它来自厨师社区,你可能会有最好的经验,使用它的厨师食谱,Vagrant,或者ServerSpec或蝙蝠测试插件。然而,作为一个CI & QA测试工具,它正以自己的方式在许多可用的社区插件中获得支持。

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

如果你对Ruby,Chef,或者这一切都很陌生.一种简单的入门方法是安装ChefDK,包括test-kitchenknifeBerkshelf和basic /Chef.io支持的测试工具。

一旦您有了这些功能,并且如果您感到冒险,或者想尝试使用其他可插拔的供应程序、驱动程序和busser插件,您可以使用以下命令将这些插件安装到ChefDK环境中(例如Mac / Unix):

代码语言:javascript
复制
$(/opt/chefdk/bin/chef shell-init $(basename $SHELL))
sudo /opt/chefdk/embedded/bin/gem install $kitchen_plugin_gem_name_here

如果您想使用我为测试Ansible剧本/角色而创建的演示存储库,请查看抗TDD

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19545720

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档