ページ ツリー
メタデータの末尾にスキップ
メタデータの先頭に移動

このページの古いバージョンを表示しています。現在のバージョンを表示します。

現在のバージョンとの相違点 ページ履歴を表示

« 前のバージョン バージョン 11 次のバージョン »

お題: Jenkins の Cookbook をつくる

Jenkins とは

 

手動でインストールするときの手順

 

Cookbook のひな形をつくる

ひな形の生成

ChefDK 内包の chef コマンドで Cookbook のひな形を生成します。

$ cd workspace
$ chef generate cookbook <Cookbook 名>
  • Cookbook 名: jenkins

生成されたもの

コマンドを実行すると、以下のファイルが作成されます。

  • .kitchen.yml
    Kitchen の設定ファイル
    テスト用のインスタンスや実行するプロビジョニングの設定を記述
     
  • Berksfile
    Berksfile の設定ファイル
    Kitchen でプロビジョニングを行うときの依存する Cookbook を記述
     
  • README.md
    Cookbook の説明書
     
  • chefignore
    ChefClient に転送しないファイルを定義
     
  • metadata.rb
    Cookbook の基本情報を記述
     
  • recipes/default.rb
    Cookbook がデフォルトで実行する Redipe

 

Eclipse プロジェクトに変換

.project 生成スクリプトを実行

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

$ cd <Cookbook 名>
$ gen-eclipse

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

Eclipse でプロジェクトをインポート

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

/home/vagrant/workspace/<Cookbook 名>

パッケージエクスプローラーに隠しファイルも表示させる

Package Explorer の ▽ を選択 -> Filters…

 「.*resources」のチェックを外す


Recipe

Recipe とは

Chef では、インスタンスのあるべき状態を Recipe(ソースコード)として記述します。
Recipe は「ファイルのダウンロード」や「コマンドの実行」など、さまざまな機能をもつ Resource で構成されています。

たとえば、 以下の 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

ここでは Chef 標準の “bash” という Resource の :run という Action を呼び出すように定義していて、“cwd” や ”code” という Attribute によりそのときのパラメータを指定しています。
指定できる Action や Attribute は Resource ごとに異なるので、Chef のドキュメントを確認してください。bash Resource であれば [ http://docs.opscode.com/resource_bash.html ] です。

Resource の実行順序

Recipe は基本的に上から順に、記述した順で Resource が実行されます。
たとえば、「ファイルをダウンロード」してから「ダウンロードしたファイルを解凍」したい場合は、次のように記述できます。 

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 を使用するか」を決めなければなりません。
そうしてからようやく具体的なソースコードを記述できます。

 たとえば、あるアプリケーションのコマンドにパスを通すために、/etc/profile.d/application.sh に 「export PATH=$PATH:/opt/application/bin」 という内容のファイルを配置したいとします。
これはどの Resource を使えば実現できるでしょうか。 

Chef のドキュメントを調べると、file Resource というのが見つかります。
これは、任意の内容のテキストファイルを任意のパスに配置する Resource のようです。
使えそうですね。
 

では、file Resource の詳細を確認しましょう。
Chef のドキュメント [ http://docs.opscode.com/resource_file.html ] を参照すると、次のようなシンタックスになっていることが確認できます。

file <配置先のファイルパス> do
  content <配置するファイルの内容>
end

充分に理解できたら、いよいよ具体的なソースコードを実装します。

file “/etc/profile.d/application.sh” do
  content “export PATH=$PATH:/opt/application/bin”
end

これで完成です。

このように Recipe を書くには、 

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

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

  3. Recipe を記述する

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


 

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

 

まずは、手動で Jenkins をインストールする場合の手順を確認します。

 

  1. http://pkg.jenkins-ci.org/redhat/ から rpm をダウンロード

  2. ダウンロードした rpm を yum コマンドでインストール

  3. /etc/sysconfig/jenkins を編集して、実行ユーザーを変更

  4. 利用するディレクトリのオーナーを変更

  5. サービスを登録・起動

 

これを Recipe にしてみましょう。

 

デフォルトの Recipe なので、chef generate cookbook で生成された recipes/default.rb を編集します。

 

ヒント

 

コマンドを実行する

 

execute Resource [ http://docs.opscode.com/resource_execute.html ]

 

ファイルをダウンロードする

 

remote_file Resource [ http://docs.opscode.com/resource_remote_file.html ]

 

※ ダウンロードしたファイルなどは /tmp ではなく Chef::Config[:file_cache_path] に保存する

 

パッケージをインストールする

 

package Resource [ http://docs.opscode.com/resource_package.html ]

 

テキストファイルの内容を置換する

 

ruby_block Resource [ http://docs.opscode.com/resource_ruby_block.html ]

 

Chef::Util::FIleEdit [ http://rubydoc.info/gems/chef/Chef/Util/FileEdit ]

 

※ execute Resource で sed コマンドを実行してもよい

 

※ file Resource + lazy でもできるかな?

 

ファイルやディレクトリのオーナーを変更する

 

ruby_block Resource [ http://docs.opscode.com/resource_ruby_block.html ]

 

FileUtils#chown_R [ http://docs.ruby-lang.org/ja/1.9.3/method/FileUtils/m/chown_R.html ]

 

※ execute Resource で chown コマンドを実行してもよい

 

サービスを起動する / 自動的に起動するように登録する

 

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






  • ラベルがありません