目次 |
---|
Kitchen を使う準備
Kitchen とは
Vagrant、EC2、Docker Engine など、任意のインスタンスを立てて、その中で Cookbook の動作を試行できるツールです。
http://kitchen.ci/
今回は高速・軽量な Docker Engine のインスタンスで Cookbook の動作チェックをしていきます。
情報 | ||
---|---|---|
Docker Engine は Linux でのコンテナ型の仮想化を提供するツールです。 ハイパーバイザ型がマシンそのものをエミュレートするのに対し、コンテナ型の仮想化ではホストマシンのカーネル上に独立したユーザー空間を構築するのにとどまります。 ハイパーバーザ型と比較すると、コンテナ型の仮想化はホストのもつリソースをほぼそのまま扱えるため、より軽量・高速に仮想化を実現できます。 また、Docker Engine ではコンテナの差分管理が可能です。 Kitchen で Docker Engine を利用するには、kitchen-docker のインストールが必要です。
|
.kitchen.yml の編集
作成した Recipe が期待したとおりに動いているか確認してみましょう。
確認には Kitchen を利用すると便利です。
Kitchen とは、任意の環境をインスタンスとして起動し、プロビジョニングを行い、その結果を検証できるツールです。
インスタンスは何度でも簡単に作り直すことができるので、気軽に Chef の Recipe を試すことができます。
まずは Kitchen を使用するために、設定ファイル Kitchen でインスタンスを立てて Recipe を実行するには、.kitchen.yml を編集しましょう。を編集します。
Section | |||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
|
Berkshelf とは
Cookbook の依存関係を解決してくれるツールです。
http://
...
...
...
...
設定ファイル(Berksfile)に使いたい Cookbook を定義しておくと、その Cookbook が依存する Cookbook を含めて再帰的に Git や Opscode Community からとってきてくれます。
Ruby の Bundler と似ているらしいです。(Ruby わからないですし、Bundler も使ったことないですが)
Berksfile の編集
プロビジョニング時に必要な外部の Cookbook は、このファイルをもとに berkshelf によって解決されます。Opscode Opscode Community の Cookbook であれば、次のように名前を指定するだけでOKです。であれば、次のように名前を指定するだけで OK です。
コード ブロック |
---|
source "https://api.berkshelf.com" cookbook ‘tar'tar' cookbook 'java' metadata |
...
ヒント |
---|
Opscode Community |
...
Git リポジトリ
git: ‘https://path/to/cookbook.git’
...
以外の Cookbook を使うには次のように書きます。
|
Kitchen インスタンスの起動とプロビジョニング
では、作成した Cookbook を Kitchen のインスタンスへプロビジョニングしてみましょう。次のコマンドを実行すると、.kitchen.yml に基づいたインスタンスが起動し、Recipe が実行されます。
コード ブロック |
---|
$ kitchen setup |
プロビジョニングが成功したら、Kitchen 成功したら、Kitchen インスタンスにログインしてみてください。
コード ブロック |
---|
[vagrant] $ kitchen login
kitchen@localhost’s password: kitchen
|
※ パスワードは 'kitchen' のようです。
ログインできたら、Recipe が期待通りに動作したか確認してみてください。
コード ブロック |
---|
[kitchen] $ sudo service jenkins status jenkins (pid 17656 1647) を実行中is running... [kitchen] $ exit |
...
sudo grep JENKINS_USER /etc/sysconfig/jenkins |
...
JENKINS_USER="kitchen"
[kitchen] $ stat --format='%a %U:%G %n' /var/*/jenkins
750 kitchen:kitchen /var/cache/jenkins
755 kitchen:kitchen /var/lib/jenkins
750 kitchen:kitchen /var/log/jenkins
[kitchen] $ exit |
うまくいっていない場合は、Cookbook を修正し、再度プロビジョニングを行います。
コード ブロック |
---|
$ kitchen converge |
...
ヒント |
---|
どうしてもうまくいかない場合は Kitchen |
...
インスタンスを破棄してからプロビジョニングを行います。
|
※
kitchen
...
の主なコマンド
コード ブロック |
---|
# インスタンスの生成 kitchen create # Chef-Solo のインストールと初回のプロビジョニング kitchen setup # プロビジョニング kitchen converge # Serverspec の実行 kitchen verify # ssh ログイン kitchen login # インスタンスの破棄 kitchen destroy |
Web ブラウザで Jenkins にアクセス
docker コマンドでコンテナのポートを確認します。
コード ブロック |
---|
$ docker ps CONTAINER ID PORTS e35e89ea252a inspect --format='{{.NetworkSettings.Ports}}' `docker ps -n=-1 -q` map[22/tcp:[map[HostIp:0.0.0.0 HostPort:49153->22]] 8080/tcp, :[map[HostIp:0.0.0.0 HostPort:49154->8080/tcp]]] |
コンテナの 8080 ポートがホストの 49154 にフォワーディングされていることが確認できます。
Firefox などの Web ブラウザで http://localhost:49154/ にアクセスしてみてください。
Jenkins の画面が表示されていれば成功です。