旧ブログ

sambaiz.net に引っ越しました

chef soloでJenkinsを入れる

最近、サーバーを一から構築する必要があって、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