簡體   English   中英

如何組織Bento - Veewee - Vagrant項目

[英]How to organize a Bento - Veewee - Vagrant project

我正在嘗試使用Bento,Veewee和Vagrant來自動化配置VM的過程。 這種方法對簡化開發,開發測試和QA流程有很大的希望。

(對於那些沒有遇到過這些問題的人--Vagrant可以很容易地在Virtual Box,VMWare,EC2等中快速設置/拆除虛擬機; Veewee簡化了為Veewee構建基礎盒的過程;而Bento簡化了過程定義基本框然后自動化Veewee的操作)。

問題是,Bento,Veewee和Vagrant之間的相互關系令人困惑。 許多定義文件和一些操作都是跨層重復的,並且不清楚哪個層應該獲取特定於我的項目的更新。 Ruby環境也使這很復雜 - 似乎Bento命令都需要從Bento目錄運行,因此盒子和其他文件最終會出現在不合邏輯的地方。

任何人都可以建議使用這種工具組合的文件布局和工作流程嗎?

我正在回答我自己的問題,以捕捉我發現的東西。


有一種方法可以讓Bento,Veewee,Vagrant和Ruby以半合理的方式協同工作,但它很復雜。 最好使用最新版本的Bento,將Veewee替換為Packer工具。

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

  1. 每個Packer框定義都在一個JSON文件中,該文件引用一個平面的腳本文件列表 - 不再是三層帶符號鏈接的文件; 更容易理解,更好的源代碼控制。

  2. Packer二進制文件是OS本機可執行文件(不再在Ruby中)。 您可以通過將它們放在路徑上的某個位置來部署它們(例如Linux上的/ usr / local / bin)。 Packer避免了Ruby瘋狂。


這是一個簡單的工作流程:

  1. 安裝VirtualBox。 安裝Bento。 Bento還將安裝Vagrant作為Ruby寶石; 但我們不會使用Vagrant的那個例子。 使用其操作系統的本機安裝程序單獨安裝Vagrant。

  2. 選擇要在目錄和文件名中使用的項目名稱。 (對於這個例子,我正在使用“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已經提供的腳本的組合,以及您為自定義目的構建的任何其他腳本。

我使用的方法看起來像這樣:

"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 mkdir ~/test; cd ~/test

  5. 使用此框初始化一個Vagrant項目: vagrant init CUSTOM

  6. 啟動VM: vagrant up

  7. 連接到VM: vagrant ssh

此時,你正常使用Vagrant而且Bento / Packer不再參與 - 他們的組合工作就是創建基本框,一旦注冊了Vagrant,Vagrant就獨自站立了。


還有很多其他有趣的東西要看:Vagrant,比如特殊的vagrant-aws插件,以及如何將它與Chef,Puppet或Ansible一起使用......但是我會在這里停止,因為我的原始問題得到了解答。

聽起來您想要應用Bento,Vagrant和/或Veewee來配置和執行盒子上的QA測試。 感謝Chef背后的人和社區,已經存在一個工具來完成您想要做的事情!

它被稱為test-kitchen 您可以將它與OpsCode / Chef維護並使用Packer構建的預構建的Chef Bento Boxes一起使用。 如果您只想進行配置/測試,則無需使用VeeWee或Packer從頭開始構建Vagrant盒或VM映像。

Test Kitchen是一個測試工具,用於在一個或多個平台上單獨執行配置代碼(在ChefAnsiblePuppetSaltStackBash / Powershell中,通過bootstrap.shbootstrap.ps1 )。 它使用驅動程序插件架構,可以將其插入各種雲提供商和虛擬化技術,如Amazon EC2Blue BoxCloudStackDigital OceanRackspaceOpenStackVagrantDockerLXC容器VMWare VSphereGoogle Compute EngineAzure , 還有很多。 還有“busser”測試插件,允許可插拔支持多個測試框架,包括BatsshUnit2RSpecServerspecShpecToxNose2MiniTestCucumberAnsibleSpec ,以及其他人正在創建。

對於Chef,Puppet和Ansible工作流程,可以支持菜譜依賴性解析器工具,如BerkshelfLibrarian-ChefLibrarian-PuppetAnsible GalaxyLibrarian-Ansible ,或者您只需擁有一個cookbooks/目錄,Test Kitchen將知道該怎么做。 如果您已經在使用Chef社區烹飪書,那么Test Kitchen集成測試已經包含在許多內容中,例如MySQL,nginx,Chef Server和runit cookbooks。

它非常靈活,對於您的用例,您可以通過選擇正確的寶石插件集來實現您想要的功能。 因為它來自Chef社區,所以您可能擁有使用Chef cookbook,Vagrant驅動程序以及ServerSpec或Bats測試插件的最佳體驗。 然而,它作為一個CI和QA測試工具正在獲得它自己的許多社區插件可用。

如果你有興趣看到外面的東西,只是搜索的RubyGems的kitchen-busser-了更多的選擇。

如果您不熟悉 Ruby,Chef或所有這些......一個簡單的入門方法是安裝ChefDK ,其中包括test-kitchenknifeBerkshelf和基本/ Chef.io支持的測試工具。

一旦你有了這個,如果你喜歡冒險或想要嘗試其他可插拔的配置程序,驅動程序和總線插件,你可以使用這些安裝 ChefDK Ruby環境(Mac OS X / Unix的例子)中的任何一個命令:

$(/opt/chefdk/bin/chef shell-init $(basename $SHELL))
sudo /opt/chefdk/embedded/bin/gem install $kitchen_plugin_gem_name_here

如果你想使用我為測試Ansible playbooks / roles而創建的演示存儲庫,請查看Ansible TDD

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM