Berkshelfのissueで結構重要なことが書いている(気がした)ので、簡単にまとめておく(間違ってる箇所あったら編集リクエスト下さい)。元々The Berkshelf Wayはyoutube動画の方のスライドのタイトルだけど、ここに書いてある内容にも合ってる気がしたので、同じタイトル付けてみた。
How to use Berkshelf to manage Organization repo like the Librarian-chef does? #535
Cookbookのあるべき姿
Berkshelfのコアチームはcookbookの以下の様にあるべきだと思っている.
- 各cookbookは個別のGitリポジトリに格納され、全てのcookbookが個々のBerksfileを持つべき
- 各cookbookに対してCIサーバ上にビルドジョブを作成し、そのジョブの中でテストを行った上でChef Serverにアップロードすべき
- 各cookbookを1つのソフトウェアのプロジェクトと考えるべき
- 全てのcookbookをchef repoに突っ込むという考えは捨てるべき
- 全てのcookbookを1つのリポジトリに入れるという事は単一責務を破壊する行為
- commit historyが読みづらくなるし、全てのデベロッパーが全てのcookbookにアクセス出来るという前提を置いた考え方になっている(1つのリポジトリに全てのcookbookがあるということは)
https://github.com/berkshelf/berkshelf/issues/535#issuecomment-18246039
https://github.com/berkshelf/berkshelf/issues/535#issuecomment-18123272
https://github.com/berkshelf/berkshelf/issues/535#issuecomment-98868265
CookbooksのないChef Repo
chef-repoに含めるべきものは以下
- environments
- data bags
- roles (berkshelfのメンバーはroleは使うなと言っているので、もしどうしても使うならくらいのもの)
ここにcookbooksディレクトリは 含まれない
chef-repoをcookbookをchef-serverにアップロードする場所として使う為にBerksfileを置くのはあり。Berksfileに自分のインフラで使用するcookbookを記載して、berks uploadでchef serverにアップロードしたりberks packageでパッケージするのに使える。但し、chef-repoをcookbookを開発する場所として使うべきではない。
https://github.com/berkshelf/berkshelf/issues/535#issuecomment-18300649
https://github.com/berkshelf/berkshelf/issues/535#issuecomment-29508430
https://github.com/berkshelf/berkshelf/issues/535#issuecomment-29533429
その他
chef-repo使わない場合knife.rbはどこに置くの?
~/.chef/knife.rbに置きなされ
https://github.com/berkshelf/berkshelf/issues/535#issuecomment-18415517
chef-serverを複数使う場合はそれじゃ無理なんだけど?
knife-blockを使ってみなよ
https://github.com/berkshelf/berkshelf/issues/535#issuecomment-18462031
cookbook毎にリポジトリを作る構造の利点
- berkshelfがそれを想定した作りになっているので、berkshelfを使って作業しやすい
- 多くの人がこの方法をとるので、助けを得やすい
- cookbookとgit tagを一致させられる(それを助けるツールもある)
- 全てのcookbookが同じ構造なので汎用的なビルドジョブを作る事が可能
お前らのApplication CookbookとLibrary Cookbookは間違っている
Application Cookbook
Application cookbookはアプリケーションをインストールし設定するcookbookのことを指す。例えばmy-webappというアプリケーションがあるとした時に、そのcookbookがNGINXのcookbookに依存していたとしてもNGINXのcookbookをLibrary Cookbookとは呼ばない。NGINXのcookbookもまたアプリケーションcookbook。
Library Cookbook
LWRPや定義だけのCookbookのことをLibrary Cookbookと言う。通常Library cookbookはレシピを含まない。
リンク
The Berkshelf Way - Youtube
The Berkshelf Way - Slideshare
How to use Berkshelf to manage Organization repo like the Librarian-chef does? #535