Virtual BoxでJenkinsを動かす

前提:
Vagrant: 1.1.2 (公式サイトからダウンロード)
Chef: 11.4.0 (rubygemでインストール)
knife-solo: 0.3.0 (githubからcloneしてインストール)
Opscode Communityに登録済み・鍵を設定済み


※コンソールの出力結果を見ながら、思い出しながら書いているので、抜けがある可能性あり


※大問題:下記を実行後に、"vagrant halt"→"vagrant up"しても、Jenkinsにアクセス出来ない。
chefで実行されたが、起動時に実行していないことがある?


適当なフォルダでVagrant公式にあるスクリプトを実行

mkdir vm
cd vm
vagrant box add base http://files.vagrantup.com/lucid32.box
vagrant init


Vagrantファイルを少し修正し下記のようにする。(コメントアウト以外の箇所を抜粋)

Vagrant.configure("2") do |config|
  config.vm.box = "base"
  config.vm.network :private_network, ip: "192.168.50.11"
  config.vm.provider :virtualbox do |vb|
    vb.customize ["modifyvm", :id, "--memory", "1024"]
  end
end

やっていることは、
・先ほどダウンロードしたubuntu(baseとラベリング)を利用する
・固定IPを設定
・メモリ使用量を1024MByteに設定


VMを起動する。また、sshで入れるようにしておく(ここでは"vm"という名前を設定)

vagrant up
vagrant ssh-config --host vm >> ~/.ssh/config


Chefリポジトリを作成する。

knife solo init chef-repo
cd chef-repo
git init
git add .
git commit


vm上にchefを準備する。

knife solo prepare vm

nodes/vm.json が作成されるので、gitにcommitしておく。


jenkinsのcookbookを追加して、"run_list"に"jenkins"を追加し、実行する。(途中gitのcommitが複数回走るが、とりあえず全部":wq"でそのまま続行)

knife cookbook site vendor jenkins
vim nodes/vm.json
knife solo cook vm

エラーになる。

Cookbook apt not found. If you're loading apt from another cookbook, make sure you configure the dependency in your metadata

include_recipe "apt" ってところでエラーになってるっぽいので、"apt"を落としてくる。

knife cookbook site vendor apt

そのままやると、vm.jsonを変更しているので

You have uncommitted changes to your cookbook repo

といわれる。一旦変更を破棄して、再度実行する。(commit or stashしてもよい)

knife cookbook site vendor apt


無事、"apt"が取り込めたので、再度cook。

knife solo cook vm

再度エラー。

Cannot find a resource for apt_repository on ubuntu version 10.04

今度は、"apt_repository"というResourceが見つからないと言っている。
とりあえず、エラーメッセージでググり、 https://github.com/mdxp/nodejs-cookbook/issues/16 を見つける。
コミットログを見ると、"metadata.rb"に「depends "apt"」と追記しているみたい。やってみる。

cookbooks/jenkins/metadata.rb に1行追加

--- a/cookbooks/jenkins/metadata.rb
+++ b/cookbooks/jenkins/metadata.rb
@@ -5,5 +5,7 @@ description      "Installs and configures Jenkins CI server & slaves"
 long_description IO.read(File.join(File.dirname(__FILE__), 'README.md'))
 version          "0.6.3"
 
+depends "apt"
+
 %w(runit java).each { |cb| depends cb }
 %w(iptables yum apt).each { |cb| recommends cb }


再度実行。

knife solo cook vm

やっと成功。
最初に決めたIPで8080ポートにアクセス。
http://192.168.50.11:8080/
Jenkinsおじさんが見えれば完了。


Vagrant, chef solo, knife soloなどを利用して、Jenkinsサーバが作れました。
普通に構築したことが無いので、比較は出来ないのですが、思ったより簡単に出来ました。(罠はありましたが)
dependsを記述する場所が間違っている気がしますが、ホントはどこに書くものなんでしょう。。。
あと、最初に書いた大問題(再起動後に見えない)はどうしたらいいやら。。。