jenkins Cookbook 作成体験
Cookbook を生成しよう
まずは、Chef のソースコードである Recipe を格納するための Cookbook をつくります。
$ cd workspace $ chef generate cookboook jenkins
`chef` は ChefDK のコマンドです。
ここでは 'jenkins' という名前の Cookbook を `chef` コマンドで生成しています。
Cookbook は Chef のソースコードを取りまとめた単位です。
Cookbook の中には実際のソースコード(Recipe)が入ります。
default Recipe を書こう
Cookbook のメイン Recipe をつくります。
jenkins/recipes/default.rb
yum_package 'java-1.7.0-openjdk' remote_file "#{Chef::Config[:file_cache_path]}/jenkins-1.568-1.1.noarch.rpm" source 'http://pkg.jenkins-ci.org/redhat/jenkins-1.568-1.1.noarch.rpm' action :create_if_missing end yum_pakcage "#{Chef::Config[:file_cache_path]}/jenkins-1.568-1.1.noarch.rpm" service 'jenkins' do action [:start, :enable] end
Recipe にはサーバーのあるべき状態を Resource として定義します。
ここでいう yum_package や remote_file、service などが Resource の定義です。
基本的な Resource 定義の書式は次のようになっています。
<ResourceType> "ResourceName" do <Attribute> "hoge" <Attribute> "fuga" action <Action> end
Resource がどのような Attribute や Action を持つかは ResourceType により様々です。
Chef のドキュメントを参照するとよいでしょう。
今回登場する ResourceType の概要とドキュメントのリンク
ResourceType | 概要 | ドキュメント |
---|---|---|
yum_package | パッケージのインストール | http://docs.getchef.com/resource_yum.html |
remote_file | Web 上のファイルをダウンロード | http://docs.getchef.com/resource_remote_file.html |
service | サービスの制御 | http://docs.getchef.com/resource_service.html |
お試し環境を定義しよう
Kitchen インスタンスを定義します。
--- driver: name: docker provisioner: name: chef_zero platforms: - name: centos driver_config: image: centos:centos6 forward: 8080:8080 suites: - name: default run_list: - jenkins
お試し環境にプロビジョニングしてみよう
Kitchen インスタンスを起動し、Cookbook を転送してプロビジョニングを行います。
$ kitchen converge
Jenkins にアクセスしてみよう
.kitchen.yml の設定により、Kitchen インスタンスの 8080 ポートがホストマシンの 8080 ポートにフォワーディングされています。
ホストマシンの Web ブラウザで「http://localhost:8080」とアクセスしてみてください。
このように、Jenkins の画面が表示されていたら成功です。