...
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 を使用するか」を決めなければなりません。そうしてからようやく具体的なソースコードを記述できます。
...
具体的に何をしたいのかを明らかにする
使えそうな Resource を探し、仕様を確認する
Recipe を記述する
という手順を繰り返していきます。
Jenkins をインストールする Recipe をつくる
...
service Resource [ http://docs.opscode.com/resource_service.html ]
.kitchen.yml の編集
作成した Recipe が期待したとおりに動いているか確認してみましょう。
...
$ chef gem install kitchen-docker |
※ 今回の環境には既にインストールされています。
driver_config
centos をベース image とします。
...
Git リポジトリ
git: ‘https://path/to/cookbook.git’ローカルファイルシステム
path: ‘/path/to/cookbook’
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 で
...