![画像](https://habrastorage.org/getpro/habr/post_images/2d1/d80/997/2d1d80997311a46a4eceef2e0fb56713.png)
この投稿では、「栄光に満ちた21日間」でのテストキッチンの開発での経験を共有したいと思います。 私は、テストキッチンの最初の紹介のために、この投稿をできるだけシンプルで便利なものにしようとしました。
開始するには、vagrant、virualbox、および実際にテストキッチン自体のソフトウェアが必要です。
動作するOSとして、Windows 7 x64を使用しました。 なぜ窓なのか? これが問題の声明だと言ってみましょう。
3時間かかりました。 したがって、すべてのステップを自分で実行する場合は、このために半日を予約するのが理にかなっています。
それでは、行きましょう:
ステップ1.環境の準備
VirtualBoxとVagrant
最初にVirtualBoxとvagrantをインストールする必要があります
vagrantのインストール後、再起動する必要があります。
再起動後、浮浪者のパフォーマンスを確認します。
1.テストインスタンスのフォルダーを作成します。
mkdir C:\vagrant && cd C:\vagrant
2. precise32ボックスを追加します。
3.構成を初期化します。 このコマンドは、Vagrantfile構成ファイルを作成します。
C:\vagrant>vagrant init
4. Vagrantfileファイルを編集します。
-- config.vm.box = "base"
++ config.vm.box = "precise32"
5.これで、インスタンスを実行する準備ができました。
C:\vagrant>vagrant up
6.コマンドが完了したら、sshを介してローカルホストに接続します:2222:
RubyおよびRuby DevKit
次に、 rubyをインストールする必要があります。
chef-clientがインストールされている場合は、アンインストールする必要があります。 gem経由でインストールされたものを使用します。
インストール中に、 「Ruby実行可能ファイルをPATHに追加」項目をチェックして、コマンドラインからrubyを自由に実行できるようにする必要があります 。
次に、DevKitをインストールする必要があります。 必要なソフトウェアのセット(コンパイラ、ライブラリ-一言で言うとDevkit)が含まれています。 デフォルトのディレクトリ(rubyとDevKitの両方)にインストールすることをお勧めします。そうしないと、問題が発生する可能性があります。
インストールする手順は次のとおりです。
1.フォルダーを作成します。
mkdir C:\devkit && cd C:\devkit
2.アーカイブをダウンロードして、現在のディレクトリに解凍します。
3.インストールを初期化します。
インストールされたルビーのパスとバージョンが決定されたことがわかります
C:\devkit>ruby dk.rb init
[INFO] found RubyInstaller v1.9.3 at C:/Ruby193
Initialization complete! Please review and modify the auto-generated
'config.yml' file to ensure it contains the root directories to all
of the installed Rubies you want enhanced by the DevKit.
インストールされたルビーのパスとバージョンが決定されたことがわかります
4.インストール:
ruby dk.rbインストールを実行した後、DevKitへのパスをPATHに追加する必要があります。
しかし、残念ながらこれは起こりませんでした。
そのため、PATHでDevKitディレクトリへのパスを手動で追加する必要があります。
これを行う方法にはいくつかのオプションがあります。
1.コマンドプロンプトで、コマンドを実行します
この場合、PATH変数はユーザー変数に作成されます。
2.管理者に代わってcmdを開き、次を実行します。
この場合、DevkitへのパスはPATHシステム変数の最後に追加されます
3.最初の2つについて不明な場合は、この方法をお勧めします。
PATHを編集してC:\ DevKit \ bin \およびC:\ DevKit \ mingw \ bin \を追加します
新しいターミナル(cmd)を開き、以下を確認します。
C:\DevKit>ruby dk.rb install
[INFO] Updating convenience notice gem override for 'C:/Ruby193'
[INFO] Installing 'C:/Ruby193/lib/ruby/site_ruby/devkit.rb'
ruby dk.rbインストールを実行した後、DevKitへのパスをPATHに追加する必要があります。
しかし、残念ながらこれは起こりませんでした。
C:\DevKit>echo %PATH%
C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Windows\System32\WindowsPowerShell\v1.0\;C:\Ruby193\bin
そのため、PATHでDevKitディレクトリへのパスを手動で追加する必要があります。
これを行う方法にはいくつかのオプションがあります。
1.コマンドプロンプトで、コマンドを実行します
setx PATH "C:\DevKit\mingw\bin\;C:\DevKit\bin\"
この場合、PATH変数はユーザー変数に作成されます。
2.管理者に代わってcmdを開き、次を実行します。
setx PATH "%PATH%;C:\DevKit\mingw\bin\;C:\DevKit\bin\" /M
この場合、DevkitへのパスはPATHシステム変数の最後に追加されます
3.最初の2つについて不明な場合は、この方法をお勧めします。
> > > .
PATHを編集してC:\ DevKit \ bin \およびC:\ DevKit \ mingw \ bin \を追加します
新しいターミナル(cmd)を開き、以下を確認します。
C:\Users\cc>echo %PATH%
C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Windows\System32\WindowsPowerShell\v1.0\;C:\Ruby193\bin;C:\DevKit\mingw\bin\;C:\DevKit\bin\
ステップ2. Test Kitchenのインストール
そして最後に、テストキッチンのセットアップを開始できます。
1.テストキッチンで作業するためのフォルダーを作成します。
C:\>mkdir C:\kitchen && cd C:\kitchen
2.バンドラーをインストールする
C:\DevKit>gem install bundler
Fetching: bundler-1.5.2.gem (100%)
Successfully installed bundler-1.5.2
1 gem installed
Installing ri documentation for bundler-1.5.2...
Installing RDoc documentation for bundler-1.5.2...
3.テキストエディターで、次の内容を含むGemfileファイルを作成します。
source 'https://rubygems.org'
gem 'berkshelf', '~> 2.0.0' # use for manage cookbook dependencies
gem 'chef', '~> 11.6.0'
gem 'chef-zero'
gem 'json', '1.7.7' # needed for conflict resolution
gem 'kitchen-vagrant'
gem 'test-kitchen'
4.インストールを実行します。
...
C:\kitchen>bundle install
Fetching gem metadata from rubygems.org.......
Fetching additional metadata from rubygems.org..
Resolving dependencies...
Installing i18n (0.6.9)
Installing multi_json (1.8.4)
Installing activesupport (3.2.16)
...
Installing test-kitchen (1.0.0)
Installing kitchen-vagrant (0.11.3)
Using bundler (1.5.2)
Your bundle is complete!
Use `bundle show [gemname]` to see where a bundled gem is installed.
5.現在のディレクトリにダウンロードして解凍します。 テスト用のクックブック(たとえばsendmailを使用しました):
mkdir C:\kitchen\cookbooks && cd C:\kitchen\cookbooks && knife cookbook site download sendmail
7.テストキッチン設定を初期化します。
C:\kitchen>kitchen init
create .kitchen.yml
create test/integration/default
create .gitignore
append .gitignore
append .gitignore
8. 1つのインスタンスを実行するには、.kitchen.ymlを次の形式にします。
---
driver_plugin: vagrant
driver_config:
require_chef_omnibus: true
platforms:
- name: ubuntu-12.04
driver_config:
box: opscode-ubuntu-12.04
box_url: opscode-vm-bento.s3.amazonaws.com/vagrant/opscode_ubuntu-12.04_provisionerless.box
suites:
- name: default
run_list: ["recipe[sendmail]"]
attributes: {}
9.テストを実行します。
chef-clientがエラーなしで機能し、sendmailパッケージが正常にインストールされたことがわかります。
正常に実行されると、インスタンスは削除されます。
エラーが発生した場合、インスタンスは実行に遅れます。
これは、インスタンス内の問題を分析できるようにするために行われます。
C:\kitchen>kitchen test
.....................
←[0m[2014-01-11T10:17:15+00:00] INFO: *** Chef 11.8.2 ***←[36m
←[0m[2014-01-11T10:17:15+00:00] INFO: Chef-client pid: 1169←[36m
←[0m[2014-01-11T10:17:16+00:00] INFO: Setting the run_list to ["recipe[sendmail]"] from JSON←[36m
←[0m[2014-01-11T10:17:16+00:00] INFO: Run List is [recipe[sendmail]]←[36m
←[0m[2014-01-11T10:17:16+00:00] INFO: Run List expands to [sendmail]←[36m
←[0m[2014-01-11T10:17:16+00:00] INFO: Starting Chef Run for default-ubuntu-1204←[36m
←[0m[2014-01-11T10:17:16+00:00] INFO: Running start handlers←[36m
←[0m[2014-01-11T10:17:16+00:00] INFO: Start handlers complete.←[36m
←[0mCompiling Cookbooks...←[0m←[36m
←[0mConverging 2 resources←[0m←[36m
←[0mRecipe: sendmail::default←[0m←[36m
←[0m * package[sendmail] action install←[0m[2014-01-11T10:17:16+00:00] INFO: Processing package[sendmail] action install(sendmail::default line 1)←[36m
←[0m←[32m←[36m
←[0m - install version 8.14.4-2ubuntu2 of package sendmail←[0m←[36m
←[0m←[0m←[36m
←[0m * service[sendmail] action enable←[0m[2014-01-11T10:17:27+00:00] INFO: Processing service[sendmail] action enable (sendmail::default line 6)←[36m
←[0m[2014-01-11T10:17:27+00:00] INFO: service[sendmail] enabled←[36m
←[0m←[32m←[36m
←[0m - enable service service[sendmail]←[0m←[36m
←[0m←[0m←[36m
←[0m * service[sendmail] action start←[0m[2014-01-11T10:17:27+00:00] INFO: Processing service[sendmail] action start (sendmail::default line 6)←[36m
←[0m (up to date)←[0m←[36m
←[0m[2014-01-11T10:17:27+00:00] INFO: Chef Run complete in 11.695990777 seconds←[36m
←[0m[2014-01-11T10:17:27+00:00] INFO: Running report handlers←[36m
←[0m[2014-01-11T10:17:27+00:00] INFO: Report handlers complete←[36m
←[0mChef Client finished, 2 resources updated←[0m←[36m
←[0m←[36m Finished converging <default-ubuntu-1204> (0m29.54s).
←[0m←[36m-----> Setting up <default-ubuntu-1204>
←[0m←[36m Finished setting up <default-ubuntu-1204> (0m0.00s).
←[0m←[36m-----> Verifying <default-ubuntu-1204>
←[0m←[36m Finished verifying <default-ubuntu-1204> (0m0.00s).
←[0m←[36m-----> Destroying <default-ubuntu-1204>
←[0m←[36m [kitchen::driver::vagrant command] BEGIN (vagrant destroy -f)
←[0m←[36m [default] Forcing shutdown of VM...
←[0m←[36m [default] Destroying VM and associated drives...
←[0m←[36m [kitchen::driver::vagrant command] END (0m0.00s)
←[0m←[36m Vagrant instance <default-ubuntu-1204> destroyed.
←[0m←[36m Finished destroying <default-ubuntu-1204> (0m4.85s).
←[0m←[36m Finished testing <default-ubuntu-1204> (1m16.33s).
←[0m-----> Kitchen is finished. (1m16.69s)
chef-clientがエラーなしで機能し、sendmailパッケージが正常にインストールされたことがわかります。
正常に実行されると、インスタンスは削除されます。
エラーが発生した場合、インスタンスは実行に遅れます。
これは、インスタンス内の問題を分析できるようにするために行われます。
ステップ3. Berkshelf
Cookieの依存関係の問題を解決するには、Berkshelfが必要です。
なぜなら 最後の段階でインストールしました-設定に進みます:
1. vagrantのプラグインをインストールします。
C:\kitchen>vagrant plugin install vagrant-berkshelf
Installing the 'vagrant-berkshelf' plugin. This can take a few minutes...
Installed the plugin 'vagrant-berkshelf (1.3.7)'!
2. chef-cookプロジェクトを作成します。
C:\kitchen>berks init chef-cook
create chef-cook/Berksfile
create chef-cook/Thorfile
create chef-cook/.gitignore
run git init from "./chef-cook"
C:/Ruby193/bin/berks: No such file or directory - git init
create chef-cook/Gemfile
create .kitchen.yml
append Thorfile
create test/integration/default
append Gemfile
append Gemfile
You must run `bundle install' to fetch any new gems.
create chef-cook/Vagrantfile
Successfully initialized
3.インストールを実行します(ほとんどの場合、gemデータは既にインストールされています)。
cd C:\kitchen\chef-cook && bundle install
4.クックブックを作成します。
mkdir C:\kitchen\chef-cook\cookbooks && cd C:\kitchen\chef-cook\cookbooks && berks cookbook mytest
5.レシピをrunlist .kitchen.ymlに追加します。
C:\kitchen\chef-cook\.kitchen.yml
---
suites:
- name: default
run_list: ["recipe[mytest]"]
attributes: {}
6.テストを実行します。
エラーが発生します:
修正するには、次の行をBerksfileに追加する必要があります。
このエントリは、Berkshelfが指定されたCookieを見つけることができる場所を示しています。
C:\kitchen\chef-cook>kitchen test
エラーが発生します:
ERROR: Cookbook mytest not found. If you're loading mytest from another cookbook, make sure you configure the dependency in your metadata
修正するには、次の行をBerksfileに追加する必要があります。
cookbook 'mytest', :path => 'cookbooks/mytest'
このエントリは、Berkshelfが指定されたCookieを見つけることができる場所を示しています。
さらに、ローカルにないクックブック(sendmailなど)に依存関係を追加することで、タスクを少し複雑にします。
1.レシピCに次の行を追加します。\ kitchen \ chef-cook \ mytest \ default.rb:
include_recipe 'sendmail'
2.また、C:\ kitchen \ chef-cook \ mytest \ metadata.rbに依存関係を追加します。
depends 'sendmail'
3.最後に、Berksfileを編集して、次の形式にします。
つまり 「cookbook 'sendmail'」を追加しました。このエントリは、必要に応じてBerkshelfがコミュニティリポジトリからsendmail Cookieをダウンロードできることを示しています。
site :opscode
cookbook 'sendmail'
cookbook 'mytest', :path => 'cookbooks/mytest'
つまり 「cookbook 'sendmail'」を追加しました。このエントリは、必要に応じてBerkshelfがコミュニティリポジトリからsendmail Cookieをダウンロードできることを示しています。
4.クックブックの動作を確認します。
このログは、sendmailクックブックが正常にダウンロードされ、sendmailパッケージがインストールされたことを示しています。
C:\kitchen\chef-cook>kitchen conerge
....
←[0m←[36m Resolving cookbook dependencies with Berkshelf...
←[0mInstalling sendmail (0.1.0) from site: 'http://cookbooks.opscode.com/api/v1/cookbooks'
Using mytest (0.1.0) at './cookbooks/mytest'
....
←[0m * package[sendmail] action install←[0m[2014-01-15T08:00:44+00:00] INFO: Processing package[sendmail] action install (sendmail::default line 1)←[
....
←[0mChef Client finished, 2 resources updated←[0m←[36m
←[0m←[36m Finished converging <default-ubuntu-1204> (0m18.25s).
←[0m-----> Kitchen is finished. (0m18.68s)
このログは、sendmailクックブックが正常にダウンロードされ、sendmailパッケージがインストールされたことを示しています。
繰り返しますが、この投稿は、これらのツールの基本を示すために、この方向の初心者を対象としています。 しかし、それでも、それらを使用すると、多数のCookieを制御できます。 おそらく将来的には、Berkshelfの使用についてさらに詳しく説明します
便利なリンク
シェフのホームページ
テストキッチンホームページ
Berkshelfホームページ
Opscodeコミュニティクックブック
シェフの詳細については、 こちらで MistiCを書いてい ます。