最近、サーバーを一から構築する必要があって、chefを使ってみることにした。 CIしたいのでまずはJenkinsを入れる。
Chef: 11.12.4 Vagrant 1.5.4
Vagrant
この辺のコマンド
$ vagrant box add centos http://developer.nrel.gov/downloads/vagrant-boxes/CentOS-6.5-x86_64-v20140110.box $ mkdir vagrant_chef $ cd vagrant_chef $ vagrant init centos
で環境構築。 Vagrantfileに
config.vm.network :private_network, ip:"aaa.bbb.ccc.ddd"
を追加する。
起動。
$ vagrant up
sshコマンドで接続できるように
$ vagrant ssh-config --host chef_test >> ~/.ssh/config
を実行。(ssh chef_test でアクセスできるようになる)
chef
初期設定
knife configure
chefのリポジトリを作る
knife solo init chef-repo
site-cookbooks内にcookbookを作成(自作cookbookはsite-cookbooksの中に入れる)
knife cookbook create jenkins -o site-cookbooks/
site-cookbooks/jenkins/recipes/default.rb
execute "install-jenkins-repo" do command <<-_EOH_ wget -O /etc/yum.repos.d/jenkins.repo http://pkg.jenkins-ci.org/redhat/jenkins.repo rpm --import http://pkg.jenkins-ci.org/redhat/jenkins-ci.org.key _EOH_ action :run not_if { ::File.exists?("/etc/yum.repos.d/jenkins.repo") } end package "jenkins" do action :install end service "jenkins" do action [:enable, :start] end
chefをサーバーにインストール
$ knife solo prepare chef_test
nodes/chef_test.json
{"run_list":[ "jenkins"]}
実行
$ knife solo cook chef_test
結果
... STDERR: bash: /usr/bin/java: No such file or directory ... ERROR: RuntimeError: chef-solo failed. See output above.
Javaが入っていなかったのでこれもchefで入れる。
Java
$ knife cookbook create java -o site-cookbooks/
site-cookbooks/java/recipes/default.rb
yum_package "java-1.7.0-openjdk-devel.x86_64" do action :install end execute "yum-update" do user "root" command "yum -y update" action :run end
nodes/chef_test.json
{"run_list":[ "java", "jenkins"]}
これで再実行すると
... Recipe: jenkins::default * execute[install-jenkins-repo] action run (skipped due to not_if) * package[jenkins] action install (up to date) * service[jenkins] action enable (up to date) * service[jenkins] action start - start service service[jenkins] ... Chef Client finished, 3/5 resources updated in 262.589275007 seconds
Jenkinsが動き出したようだけども、8080番ポートが空いていないのでアクセスできない。 とりあえずsshで入って
(chef_test) $ sudo service iptables stop
でiptablesを止めてアクセスしたら動いているのを確認できた。
参考
【AWS】JenkinsとserverspecでChefのテストを自動化する http://dev.classmethod.jp/cloud/aws/aws-jenkins-run-ec2-and-chef-cooking/
今日作りたくなる簡単cookbook [Kim'sキッチン] yumsetup(yum-fastestmirrorにyum update添え) http://qiita.com/ryurock/items/c99215e25bd2ff846207