久しぶりのChef
普段はCircleCIばかり使っているのですが、久しぶりにChefを使ってJenkinsをインストールすることになりました。久々すぎて完全に浦島太郎状態なのですが、今回はChef Client Local ModeとBerkshelfを使ってJenkinsをインストールしてみます。Chef Soloの時代が懐かしいです、、、
必要なファイル
最新のJenkinsを動かすには、Java8が必要です。Jenkinsのcookbookの中にもJavaのrecipeが入っているのですが、今回はJavaもBerkshelfを使ってインストールしてみます。
また、/etc/sysconfig/jenkinsファイルを編集して、タイムゾーンをJSTに設定するようにします。
ディレクトリ構成はこんな感じです。
Berkshelf
|
|
cookbooks/ ---- jenkins_server/ ------- metadata.rb
|
|---- recipes/ ---- default.rb
|
|---- attributes/ ---- default.rb
|
|---- files/ ---- config_jenkins
Berkshelf
site :opscode
cookbook 'apt'
cookbook 'windows'
cookbook 'java'
cookbook 'jenkins'
cookbook 'yum-epel'
metadata.rb
name 'jenkins_server'
depends 'java'
depends 'jenkins'
metadata.rbのdependsでcookbookの依存関係を定義しておかないと、cookbookが見つからないとのエラーが出ます。軽くハマりどころでした。
recipes/default.rb
include_recipe 'java'
include_recipe 'jenkins::master'
# 設定ファイルをコピーする
cookbook_file 'config_jenkins' do
path '/etc/sysconfig/jenkins'
action :create
notifies :reload, 'service[jenkins]'
end
attributes/default.rb
node.default['java']['install_flavor'] = 'openjdk' # ['oracle', 'oracle_rpm', 'openjdk', 'ibm', 'windows']
node.default['java']['jdk_version'] = '8'
files/config_jenkins
......
(省略)
......
## Type: string
## Default: "-Djava.awt.headless=true"
## ServiceRestart: jenkins
#
# Options to pass to java when running Jenkins.
#
JENKINS_JAVA_OPTIONS="-Djava.awt.headless=true"
JENKINS_JAVA_OPTIONS="$JENKINS_JAVA_OPTIONS -Djenkins.install.runSetupWizard=false"
JENKINS_JAVA_OPTIONS="$JENKINS_JAVA_OPTIONS -Dorg.apache.commons.jelly.tags.fmt.timeZone=Asia/Tokyo" # タイムゾーンをJSTにする
......
(省略)
......
レシピを実行する
上記のファイルが作成できたら、
berks vendor cookbooks
で必要なcookbookがcookbooks/以下にインストールされます。最後に、sudo chef-client --local-mode --runlist 'recipe[jenkins_server]'
でJenkinsが起動します。