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 をつくります。 

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_fileWeb 上のファイルをダウンロード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 の画面が表示されていたら成功です。