目次 |
---|
jenkins Cookbook を Attribute に対応させる
何を Attribute にするか
Cookbook の設計次第で何を Attribute にするかは変わりますが、今回は次の項目を Attribute にしてみましょう。
Jenkins のバージョン
特定のバージョンの Jenkins をインストールしたくなったときに、Recipe を直したくない
同じ Recipe で複数のバージョンの Jenkins をインストールできるようにしておきたい
Jenkins の rpm ファイルの URL
将来的に rpm ファイルの URL が変更されたときに、Recipe を直したくない
Jenkins の実行ユーザー
プロビジョン先のサーバーによっては実行ユーザーを変えないといけないかもしれない
ヒント
Attribute の名前
一般的には、以下のように node[<Cookbook 名>][<任意の Attribute 名>] とすることが多いようです。
コード ブロック | ||
---|---|---|
| ||
attributes:
<Cookbook 名>:
<任意の Attribute 名>: |
Recipe では cookbook_name Method [ http://docs.opscode.com/dsl_recipe_method_cookbook_name.html ] を用いることで、自身の Cookbook 名を取得することもできます。
コード ブロック |
---|
value = node[cookbook_name]['attribute'] |
※ ./attribute/default.rb では cookbook_name Method を使用できません。
前回作成した Recipe
前回は Jenkins をインストールする Cookbook を以下のように作成しました。
これを、Attribute に対応させていきます。
コード ブロック | ||||
---|---|---|---|---|
| ||||
#
# Cookbook Name:: jeknins
# Recipe:: default
#
rpm = "jenkins-1.568-1.1.noarch.rpm"
remote_file "#{Chef::Config[:file_cache_path]}/#{rpm}" do
source "http://pkg.jenkins-ci.org/redhat/#{rpm}"
end
package "#{Chef::Config[:file_cache_path]}/#{rpm}"
ruby_block 'set JENKINS_USER' do
block do
file = Chef::Util::FileEdit.new('/etc/sysconfig/jenkins')
file.search_file_replace_line(/^JENKINS_USER="jenkins"/, 'JENKINS_USER="kitchen"')
file.write_file
end
end
ruby_block 'change jenkins directories owner' do
block do
FileUtils.chown_R 'kitchen', 'kitchen', ['/var/lib/jenkins', '/var/log/jenkins', '/var/cache/jenkins']
end
end
service 'jenkins' do
action [:start, :enable]
end |
[演習] Attribute に対応させよう
前回作成した Cookbook を Attribute に対応させてみましょう。
Attribute にすべきものは Cookbook の設計によりけりですが、今回は次の項目を Attribute にしてみてください。
Jenkins のバージョン
特定のバージョンの Jenkins をインストールしたくなったときに、Recipe を直したくない
同じ Recipe で複数のバージョンの Jenkins をインストールできるようにしておきたい
Jenkins の rpm ファイルの URL
将来的に rpm ファイルの URL が変更されたときに、Recipe を直したくない
Jenkins の実行ユーザー
プロビジョン先のサーバーによっては実行ユーザーを変えないといけないかもしれない
Kitchen で確認
Attribute への対応が完了したら、.kitchen.yml を編集し、Kitchen インスタンスで動作チェックをしてみましょう。
自動テストに対応する
いままでは kitchen login で毎回インスタンスにログインして手動でプロビジョニング結果を確認していました。
ただそれでは非常に手間がかかりますし、確認する方法が残らないので、本当に正しいのか保障できません。
次のページ ではプロビジョニングが期待通りに実行されたのか自動テストする仕組みを紹介しています。