chef-soloでさくらVPSにJenkinsを立ててみる。(詳細編)

途中gdgdになってしまった、chef-soloでさくらVPSにJenkinsを立ててみる。ですが、たぶん今回が最終回。

プライベートに時間がさけるようになったので、chef-solo関連を整理してみた。
ただ、やっぱり独学なので、本当にこれでいいのかわかりません。本を買おうか悩み中です。

ではまず、自分的に綺麗にしたレポジトリは以下
https://github.com/shiraji/chef-repo

よくよく考えてみたら、chefだけで一つレポジトリ持っておけば、Jenkins専用とかにしなくてもいいじゃんと思ったので、chef-repoに改名しました。
これ書き終わったら、jenkins_server_settingsとか消す予定。

変更があったのはinstall_cookbook.shができたこと。これをキックするとBerkshelfを実行する。
Berkshelfは非常に便利で、gemでインストール後、必要なcookbookをOPSCODEのライブラリーから持ってこれる。
基本OPSCODEのものでいいと思うけど、違うものを指定することもできる。
今回必要なものはJavaとJenkins。設定ファイルはBerksfile
https://github.com/shiraji/chef-repo/blob/master/Berksfile

site :opscode
cookbook 'java'
cookbook 'jenkins'

たった三行・・・。理解すれば本当に簡単です。
最初に持ってくるサイトを指定し、必要なcookbookを指定する。
cookbookを引っ張ってくるとBerksfile.lockというファイルができる。これはGit管理する必要がないので、.gitignoreに入れておく。
あと、基本cookbookの中は他のところから引っ張ってきたcookbook、
site-cookbooksには自分が作成したcookbookをというのが流儀っぽいので、cookbookも.gitignoreに入れておく。

次にcookbooks関連。
これは以前説明した通り、サーバの基本的な設定とユーザ作成。

nodes
nodeはインストールさせる各サーバごとに持たせるもの。
今回はjenkinsをインストールするサーバ用なので、jenkins.jsonを作成。
中身はユーザ作って、サーバの設定をして、jenkinsをインストールする。

roles
2つ作成。
1つ目
https://github.com/shiraji/chef-repo/blob/master/roles/adduser_shiraji.json

これは以前作成したaddusersというレシピのデフォルトの値が外出しされているものです。
なぜこのようなことをしたかというと、次にshiraji2というユーザを作成したい場合、roleに同じようなadduser_shiraji2.jsonを作成して、それをnodeで呼べばいいため。
基本、デフォルトの値を使わず、roleで上書きするようにすると毎回変更しなくてもすむ。(デフォルトの値は残しておいても問題ないのだけど。)

2つ目
https://github.com/shiraji/chef-repo/blob/master/roles/jenkins.json

これは以前にもあったものと同じ。Javaのoverride_attributesとJenkinsインストールするという設定が記載されている。

こんな感じでroleとnodeをうまく使って、拡張性を持たせたほうがいいですよという話。(ただ、それが正しいかどうかは知りませんw)

一番難しかったのはroleとnodeの関係。この2つを理解すれば、本当に簡単にセットアップできました。