jenkins Cookbook 作成体験
Cookbook を生成しよう
まずは、Chef のソースコードである Recipe を格納するための Cookbook をつくります。
$ cd workspace $ chef generate cookboook jenkins
`chef` は ChefDK のコマンドです。
ここでは 'jenkins' という名前の Cookbook を `chef` コマンドで生成しています。
Cookbook は Chef のソースコードを取りまとめた単位です。
Cookbook の中には実際のソースコード(Recipe)が入ります。
Cookbook を Eclipse で編集しよう
Cookbook を Eclipse プロジェクトとしてインポートしましょう。
まずは、Eclipse プロジェクトを生成します。
$ cd jenkins $ gen-eclipse
Eclipse を起動して、生成したプロジェクトをインポートします。
アプリケーション -> プログラミング -> Eclipse | |
OK | |
File -> Import... | |
General -> Existing Projects into Workspace | |
Browse -> 「jenkins」ディレクトリを選択 -> OK -> Finish |
default Recipe を書こう
Cookbook のメイン Recipe をつくります。
# OpenJDK をインストール(Jenkins の実行に必要なため) yum_package 'java-1.7.0-openjdk' # Jenkins の rpm をダウンロード 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 # Jenkins をインストール yum_pakcage "#{Chef::Config[:file_cache_path]}/jenkins-1.568-1.1.noarch.rpm" # Jenkins サービスを自動起動 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 は Vagrant や EC2、Docker Engine などでインスタンスを起動して Cookbook の動作をチェックするためのツールです。
.kitchen.yml には Kitchen で起動するインスタンスの設定を定義します。
driver:
高速・軽量な Docker Engine を使うように指定します。
provisioner:
Chef Zero によるプロビジョニングを行うように指定します。
platforms:
Docker Engine のコンテナのベース Image として centos:centos6 を使用するように指定します。
また、Jenkins の起動確認のために 8080 ポートをフォワーディングするように指定ます。
suites:
jenkins Cookbook を収束するように指定します。
お試し環境にプロビジョニングしてみよう
Kitchen インスタンスを起動し、Cookbook を転送してプロビジョニングを行います。
$ kitchen converge
`kitchen converge` コマンドを実行すると、.kitchen.yml の定義に従って Kitchen インスタンスが生成され、プロビジョニングが行われます。
kitchen のその他のコマンド
Kitchen インスタンスへの ログイン
$ kitchen login
※ パスワードは 'kitchen'
Kitchen インスタンスの破棄
$ kitchen destroy
Jenkins にアクセスしてみよう
.kitchen.yml の設定により、Kitchen インスタンスの 8080 ポートがホストマシンの 8080 ポートにフォワーディングされています。
ホストマシンの Web ブラウザで「http://localhost:8080」とアクセスしてみてください。
このように、Jenkins の画面が表示されていたら成功です。