4

Bento、Veewee、および Vagrant を使用して、VM のプロビジョニング プロセスを自動化しようとしています。このアプローチには、開発、開発テスト、および QA プロセスを簡素化するための多くの可能性があります。

(これらに遭遇したことがない人のために -- Vagrant は、Virtual Box、VMWare、EC2 などで VM を迅速にセットアップ/破棄することを容易にします。Veewee は、Veewee のベース ボックスを構築するプロセスを簡素化し、Bento は、ベースボックスを定義し、Veewee の操作を自動化します)。

問題は、Bento、Veewee、および Vagrant の相互関係がわかりにくいことです。多くの定義ファイルと一部の操作がレイヤー間で複製されており、どのレイヤーが自分のプロジェクトに固有の更新を取得する必要があるかが明確ではありません。Ruby 環境もこれを非常に複雑にします。Bento コマンドはすべて Bento ディレクトリから実行する必要があるように思われるため、ボックスやその他のファイルが非論理的な場所に配置されてしまいます。

このツールの組み合わせを使用するためのファイル レイアウトとワークフローを提案できる人はいますか?

4

2 に答える 2

4

私が発見したものをキャプチャするために、私自身の質問に答えています。


Bento、Veewee、Vagrant、Ruby を半合理的な方法で連携させる方法はありますが、それは複雑です。Veewee を Packer ツールに置き換えた Bento の最新バージョンを使用することをお勧めします。

Packer は、多かれ少なかれ Veewee と同じことを行いますが、次のようないくつかの大きな改善を行いました。

  1. 各 Packer ボックスの定義は、スクリプト ファイルのフラット リストを参照する単一の JSON ファイル内にあります。理解しやすく、ソースコード管理に適しています。

  2. Packer バイナリは OS ネイティブの実行可能ファイルです (Ruby にはありません)。それらをパスのどこかに配置してデプロイします (Linux の /usr/local/bin など)。Packer は Ruby の狂気を回避します。


簡単なワークフローは次のとおりです。

  1. VirtualBox をインストールします。Bento をインストールします。また、Bento は Vagrant を Ruby gem としてインストールします。しかし、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. そのファイルの「builders」セクションを編集して、VM のディスク サイズ、RAM サイズ、ssh ポートなどを変更します。

  5. 「provisioners」セクションの「output」行を編集して、作成するボックス ファイルにわかりやすい名前を付けます。(この例では、「BOXFILE」を使用しています)。ファイル名に Unix タイムスタンプを追加するために埋め込むことができることに注意してください{{timestamp}}-- ファイル名を一意にするのに役立ちます。

  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 ゲスト アドオンとベース OS のディスク イメージ (ISO) が以前にダウンロードされていない場合は、今回ダウンロードされます。これらのファイルは大きいため、この手順には時間がかかる場合があります。

  2. Packer は VirtualBox を使用して一時的な VM を作成し、その上で指定されたすべてのスクリプトを実行します。このプロセスが完了すると、VM のコピーが上記で指定した BOXFILE 名を使用して、bento / builds / visualbox ディレクトリにキャプチャされ、Packer は VirtualBox VM を破棄します。

  3. 作成したボックスを Vagrant に登録します。個別にインストールされたバージョンの Vagrant を使用して (たとえば、/usr/local/bin/vagrant またはお使いの OS に適したものを指定する必要がある場合があります)、 を実行しますvagrant box add CUSTOM path/to/BOXFILE。これにより、Vagrant がこのボックス定義から VM を作成するために必要なファイルを含む新しいサブディレクトリが ~/ .vagrant.d/boxs/CUSTOM/VirtualBox に作成されます。

  4. Vagrant プロジェクト ディレクトリを作成し、そこに cd します。やったmkdir ~/test; cd ~/test

  5. このボックスを使用して Vagrant プロジェクトを初期化します。vagrant init CUSTOM

  6. VM を開始します。vagrant up

  7. VM に接続します。vagrant ssh

この時点で、Vagrant を通常どおり使用しており、Bento と Packer は関与しなくなりました。これらの組み合わせの仕事はベースボックスを作成することだけであり、Vagrant に登録されると、Vagrant は独立します。


re: Vagrant には、特別な vagrant-aws プラグインや、Chef、Puppet、または Ansible での使用方法など、注目すべき興味深いものが他にもたくさんあります。

于 2013-10-23T19:49:32.847 に答える