ページ ツリー

比較バージョン

キー

  • この行は追加されました。
  • この行は削除されました。
  • 書式設定が変更されました。

...

Cookbook がデフォルトで実行する Redipe

 

Eclipse プロジェクトに変換

スクリプトを実行し .project を生成します。

...

コード ブロック
$ cd <Cookbook 名>

...


$ gen-eclipse

 


Eclipse で .project をインポートします。

...

File -> Import… -> General -> Existing Projects into Workspace

...

コード ブロック
/home/vagrant/workspace/<Cookbook 名>

 


  • 隠しファイルを表示するように設定する

Package Explorer の ▽ を選択 -> Filters…
「.*resources」のチェックを外す

 

Recipe の書き方

Chef では、インスタンスのあるべき状態を Recipe(ソースコード)として記述します。

...

たとえば、 以下の Recipe は 「bash により “/tmp” ディレクトリで “tar zxf archive.tar.gz” というスクリプトを実行する “extract tar file” という名前の Resource」 を定義したものです。


 

コード ブロック
 

 

 

bash “extract tar file” do

 cwd “/tmp”

 code “tar zxf archive.tar.gz”

 action :run

end

 

...

 

remote_file “/tmp/archive.tar.gz” do

 source “http://path/to/archive.tar.gz

 action :create

end


bash “extract tar file” do

 cwd “/tmp”

 code “tar zxf archive.tar.gz”

 action :run

end

 



 

Recipe を書く手順

Recipe を書くにはまず、「具体的に何をしたいのか」を明らかにし、それに対し「どの Resource を使用するか」を決めなければなりません。そうしてからようやく具体的なソースコードを記述できます。

...

  1. 具体的に何をしたいのかを明らかにする

  2. 使えそうな Resource を探し、仕様を確認する

  3. Recipe を記述する


という手順を繰り返していきます。


 

Jenkins をインストールする Recipe をつくる

...

service Resource [ http://docs.opscode.com/resource_service.html ]

 

.kitchen.yml の編集

作成した Recipe が期待したとおりに動いているか確認してみましょう。

...

 

$ chef gem install kitchen-docker

 

※ 今回の環境には既にインストールされています。

 

driver_config

centos をベース image とします。

...


 

Kitchen インスタンスの起動とプロビジョニング

...

 

# インスタンスの生成

kitchen create

 

# Chef-Solo のインストールと初回のプロビジョニング

kitchen setup

 

# プロビジョニング

kitchen converge

 

# Serverspec の実行

kitchen verify

 

# ssh ログイン

kitchen login

 

# インスタンスの破棄

kitchen destroy

 



 

Web ブラウザで Jenkins にアクセス

docker コマンドでコンテナのポートを確認します。

...

※ 実際の運用では knife を使っていないので、間違っているかもしれません。


 

Attribute の値を Recipe で 使う

...

  • Jenkins のバージョン
    特定のバージョンの Jenkins をインストールしたくなるかもしれない

  • Jenkins の rpm ファイルの URL
    将来的に、rpm ファイルの URL が変更されるかもしれない

  • Jenkins の実行ユーザー
    特定のユーザーで Jenkins を実行したくなるかもしれない


 

ヒント

Attribute の名前

一般的には、「node[<Cookbook の名前>][<任意の Attribute 名>]」とすることが多いようです。
Recipe の中で自身の Cookbook 名を取得するには cookbook_name Method [ http://docs.opscode.com/dsl_recipe_method_cookbook_name.html ] を利用できます。

...

Foodcritic の公式サイトには各ルールの詳細な情報と修正例が記載されていますので、参考にしてください。



 

Ruby の静的テストツールを利用する

Recipe は Ruby で記述されているので、Ruby の汎用的な静的テストツールを利用することもできます。

...

※ 「*」の部分はなんでもいいようですが、Recipe の名前と同じにするのをよく見かけます。


 

Serverspec のテストコードの記述

たとえば、あるパスにファイルが存在することを確認するには、以下のように記述します。

...

※ 「kitchen verify」以外に、「kitchen test」というコマンドもあります。


 

Vagrant で Cookbook をつかう


Vagrantfile の書き方

...

一般的に、./cookbooks ディレクトリに Community Cookbook や Git リポジトリから取得した Cookbook を配置し、./site-cookbooks ディレクトリにこの Vagrantfile で起動する VM 専用の Cookbook を配置します。


 

jenkins Cookbook を Vagrant で

...