ページ ツリー

比較バージョン

キー

  • この行は追加されました。
  • この行は削除されました。
  • 書式設定が変更されました。

目次

Kitchen を使う準備

Kitchen とは

Vagrant、EC2、Docker Engine など、任意のインスタンスを立てて、その中で Cookbook の動作を試行できるツールです。
http://kitchen.ci/ 

...

情報

Docker Engine は Linux でのコンテナ型の仮想化を提供するツールです。

ハイパーバイザ型がマシンそのものをエミュレートするのに対し、コンテナ型の仮想化ではホストマシンのカーネル上に独立したユーザー空間を構築するのにとどまります。

ハイパーバーザ型と比較すると、コンテナ型の仮想化はホストのもつリソースをほぼそのまま扱えるため、より軽量・高速に仮想化を実現できます。

また、Docker Engine ではコンテナの差分管理が可能です。
たとえば、いちど CentOS をインストールしたコンテナをつくってしまえば、CentOS + apache や CentOS + MySQL などのコンテナを構築するときに毎回 CentOS をインストールする必要はありません。

KitchenDocker Engine を利用するには、kitchen-docker のインストールが必要です。
ChefDK を利用している場合は、次のコマンドでインストールできます。(開発環境にはインストール済みです) 

コード ブロック
chef gem install kitchen-docker

 

.kitchen.yml の編集

Kitchen でインスタンスを立てて Recipe を実行するには、.kitchen.yml を編集します。

Section
Column
コード ブロック
title.kitchen.yml
---
driver:
  name: docker

provisioner:
  name: chef_zero

platforms:
  - name: centos
    driver_config:
      image: centos:centos6
      forward: 8080

suites:
  - name: default
    run_list:
      - tar
      - java
      - jenkins
    attributes:
 
Column

driver

標準では vagrant ですが、開発サイクルを早くまわすために、より軽量・高速な docker を使用します。

driver_config

kitchen-docker の設定を書きます。

image

ベースとする docker image の名前を指定します。
利用できる image 名は Dockerfile の FROM 句 で指定できるものと同じです。

forward

ホストマシンにフォワーディングするポート番号を指定します。
この例では jenkins が使用する 8080 ポートがホストマシンから見えるように指定しています。

run_list

実行する Recipe を指定します。
この例では自作した jenkins Cookbook の Recipe を指定しています。

ただ、Jenkins の動作には Java が必要ですので、Opscode Community の java Cookbooktar Cookbook(java Cookbook の動作に必要) も指定しています。
※ 外部の Cookbook を使用するには後述する Berksfile の編集が必要です。

attributes

Recipe にわたす Attribute (Recipe に対するパラメータのようなもの)を指定します。

 

Berkshelf とは

Cookbook の依存関係を解決してくれるツールです。
http://berkshelf.com/

...

Ruby の Bundler と似ているらしいです。(Ruby わからないですし、Bundler も使ったことないですが)

 

Berksfile の編集

Opscode Community の Cookbook であれば、次のように名前を指定するだけで OK です。

...

ヒント

Opscode Community 以外の Cookbook を使うには次のように書きます。

コード ブロック
# ローカルファイルシステム
cookbook 'pvpnet', path: '/Users/reset/code/riot-cookbooks/pvpnet-cookbook'
 
# Git リポジトリ
cookbook 'mysql', git: 'git://github.com/opscode-cookbooks/mysql.git'

 

Kitchen インスタンスの起動とプロビジョニング

次のコマンドを実行すると、.kitchen.yml に基づいたインスタンスが起動し、Recipe が実行されます。

...

ヒント

どうしてもうまくいかない場合は Kitchen インスタンスを破棄してからプロビジョニングを行います。

コード ブロック
$ kitchen destroy
$ kitchen setup

 

kitchen の主なコマンド

コード ブロック
# インスタンスの生成
kitchen create

# Chef-Solo のインストールと初回のプロビジョニング
kitchen setup

# プロビジョニング
kitchen converge

# Serverspec の実行
kitchen verify

# ssh ログイン
kitchen login

# インスタンスの破棄
kitchen destroy

 

Web ブラウザで Jenkins にアクセス

docker コマンドでコンテナのポートを確認します。

...