開発2部の吉岡です。
前回の記事 rpmを使ったchef-soloのレシピを作成していく
前々回の記事 chef-soloで使うrpmの配信サーバーを立ててみる
今回はVagrantとchef-soloを組み合わせて開発環境を作っていきたいと思います。
git submoduleでクックブックを持ってくる
前回の記事では、作成したクックブックをgitにpushしておきました。
vagrantのディレクトリを「git init」しておき、クックブック(「site-cookbooks」ディレクトリ)をsubmoduleとして追加してやります。
(なので、「cookbooks」に入っているサードパーティ製のレシピは使わない前提です)
vagrant initしたディレクトリで
$ git submodule add レポジトリURL ./site-cookbooks
とすると、site-cookbooksディレクトリが作成され、レシピが取り込まれます。
ディレクトリ構成としては下記のような感じです。
┳Vagrantfile
┗site-cookbooks
┣httpd-rpm
┃┗クックブックのファイル・ディレクトリ
┣php55-rpm
┃┗クックブックのファイル・ディレクトリ
┗mysql–56-rpm
┗ クックブックのファイル・ディレクトリ
Vagrantfileのprovision
Vagrantとchef-soloの連携は、Vagrantfileのprovisionで行います。
具体的には下記のような感じです。
config.vm.provision :chef_solo do |chef| chef.cookbooks_path = ["./site-cookbooks"] chef.add_recipe "mysql-56-rpm" chef.add_recipe "httpd-rpm" chef.add_recipe "php55-rpm" chef.json = { "httpd" => { "ServerName" => "lamp.local.localnet:80" }, "mysql" => { "sync_binlog" => "0", "innodb_buffer_pool_size" => "128M" } } end
chef.cookbooks_path でcookbookのファイルパスを指定し、chef.add_recipeで使用するレシピを指定します。
また、chef.jsonでattributesの設定も行うことが出来ます。
環境を作ってみる
あとは
$ vagrant up
すると、chef-soloが頑張って設定してくれるはず!です。
他のスタッフに環境を配布したい時は、このvagrantのディレクトリをリモートに「git push」しておきます。
そして配布先で
$ git clone vagrantのリポジトリのURL $ cd cloneしたディレクトリ $ git submodule update --init $ git submodule foreach 'git pull origin master'
と、cloneした後、「git submodule update –init」でchefのリポジトリを取り込みます。
そして、「git submodule foreach ‘git pull origin master’」でsubmoduleを最新化します。
(http://rochefort.hatenablog.com/entry/20110410/p1を参考にさせて頂きました。)
あとは「vagrant up」するだけ。のはずです。
このやり方だと、vagrantを動かす方のPCにchefをインストールする必要はないので楽ちんです。
まとめ
長々と3回に分けて記事を作成してしまいましたが、これで統一した開発環境を楽に社内に展開出来るはずです。
難しいのはrpmでインストールするレシピを作成する部分でしょうか…
依存関係のエラーが結構出てくるので。
まだまだVagrantもchefも使いこなせていませんが、効率的に開発が行えるように環境を整えて行きたいと思います!
ちなみに、アイキャッチ画像は、商売繁盛な飾り付けをする部長です。今年もさらに躍進できる一年でありますように!