初心者向けのテストキッチン

画像 こんにちは、Habrausers! 今日は、料理の本のテストを容易にするツールについてお話したいと思います。 実際の問題は何ですか? インフラストラクチャの規模が拡大するにつれて、Cookieに変更を加えた場合の依存関係と結果を追跡することが難しくなり、それらのテストの問題が議題になります。 foodcritics、chefspec、minitest、test kitchenなどのツールは、これらの問題の解決に役立ちます。

この投稿では、「栄光に満ちた21日間」でのテストキッチンの開発での経験を共有したいと思います。 私は、テストキッチンの最初の紹介のために、この投稿をできるだけシンプルで便利なものにしようとしました。





開始するには、vagrant、virualbox、および実際にテストキッチン自体のソフトウェアが必要です。

動作するOSとして、Windows 7 x64を使用しました。 なぜ窓なのか? これが問題の声明だと言ってみましょう。

3時間かかりました。 したがって、すべてのステップを自分で実行する場合は、このために半日を予約するのが理にかなっています。

それでは、行きましょう:



ステップ1.環境の準備



VirtualBoxとVagrant


最初にVirtualBoxvagrantをインストールする必要があります

vagrantのインストール後、再起動する必要があります。



再起動後、浮浪者のパフォーマンスを確認します。



1.テストインスタンスのフォルダーを作成します。


mkdir C:\vagrant && cd C:\vagrant





2. precise32ボックスを追加します。


C:\vagrant>vagrant box add precise32 files.vagrantup.com/precise32.box





Downloading box from URL: files.vagrantup.com/precise32.box





Extracting box...ate: 3089k/s, Estimated time remaining: --:--:--)





Successfully added box 'precise32' with provider 'virtualbox'!





3.構成を初期化します。 このコマンドは、Vagrantfile構成ファイルを作成します。


C:\vagrant>vagrant init





4. Vagrantfileファイルを編集します。


-- config.vm.box = "base"





++ config.vm.box = "precise32"





5.これで、インスタンスを実行する準備ができました。


C:\vagrant>vagrant up





6.コマンドが完了したら、sshを介してローカルホストに接続します:2222:


login as: vagrant





vagrant@localhost's password: vagrant





Welcome to Ubuntu 12.04 LTS (GNU/Linux 3.2.0-23-generic-pae i686)





* Documentation: help.ubuntu.com





Welcome to your Vagrant-built virtual machine.





接続できた場合は、すべてが正しく行われたことを意味します。


RubyおよびRuby DevKit


次に、 rubyをインストールする必要があります。

chef-clientがインストールされている場合は、アンインストールする必要があります。 gem経由でインストールされたものを使用します。

インストール中に、 「Ruby実行可能ファイルをPATHに追加」項目をチェックして、コマンドラインからrubyを自由に実行できるようにする必要があります

次に、DevKitをインストールする必要があります。 必要なソフトウェアのセット(コンパイラ、ライブラリ-一言で言うとDevkit)が含まれています。 デフォルトのディレクトリ(rubyとDevKitの両方)にインストールすることをお勧めします。そうしないと、問題が発生する可能性があります。

インストールする手順は次のとおりです。



1.フォルダーを作成します。
mkdir C:\devkit && cd C:\devkit





2.アーカイブをダウンロードして、現在のディレクトリに解凍します。
Devkit-tdm

cd C:\devkit





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.インストール:


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.テストを実行します。


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.テストを実行します。
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を編集して、次の形式にします。


site :opscode





cookbook 'sendmail'





cookbook 'mytest', :path => 'cookbooks/mytest'







つまり 「cookbook 'sendmail'」を追加しました。このエントリは、必要に応じてBerkshelfがコミュニティリポジトリからsendmail Cookieをダウンロードできることを示しています。


4.クックブックの動作を確認します。
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を書いて ます。



All Articles