jenkins Cookbook 作成体験
Cookbook を生成しよう
開発の流れ
Section |
---|
Column |
---|
| Cookbook 開発の流れひとつの Cookbook を完成させるには、次のような手順を辿ることになります。 Drawio |
---|
| |
---|
diagramName | 開発の流れ.drawio |
---|
revision | 1 |
---|
| |
Column |
---|
Section |
---|
| Column |
---|
Cookbook 作成まずは Cookbook を作成します。 Recipe 編集テキストエディタや IDE で Recipe を編集します。 Kitchen でプロビジョニングKitchen でテスト用インスタンスを立てて、プロビジョニングを行います。 ここでプロビジョニングが成功すれば、Cookbook の完成です。 失敗した場合は、Recipe を編集しなおします。 |
|
|
|
Cookbook をつくろう
Cookbook の生成
Section |
---|
Column |
---|
| まずは、Chef のソースコードである Recipe を格納するための Cookbook をつくります。 コード ブロック |
---|
$ cd workspace
$ chef generate cookboook jenkins |
|
Column |
---|
Section |
---|
| Column |
---|
`chef` は ChefDK のコマンドです。 ここでは 'jenkins' という名前の Cookbook を `chef` コマンドで生成しています。 Cookbook は Chef のソースコードを取りまとめた単位です。 Cookbook |
| の中には実際のソースコード(Recipe)が入ります。の中には実際のソースコード(Recipe)が入ります。 |
|
|
|
default Recipe を書こう
Eclipse にインポート
Section |
---|
Column |
---|
| Cookbook を Eclipse プロジェクトとしてインポートしましょう。 まずは、Eclipse プロジェクトを生成します。 コード ブロック |
---|
$ cd jenkins
$ gen-eclipse |
Eclipse を起動して、生成したプロジェクトをインポートします。 Section |
---|
Column |
---|
1. Image Added アプリケーション -> プログラミング -> Eclipse
|
Column |
---|
2. Image Added OK
|
|
Section |
---|
Column |
---|
3. Image Added File -> Import...
|
Column |
---|
4. Image Added General -> Existing Projects into Workspace
|
|
Section |
---|
Column |
---|
5. Image Added Browse -> 「jenkins」ディレクトリを選択 -> OK -> Finish
|
|
|
Column |
---|
Section |
---|
| Column |
---|
`gen-eclipse` は Eclipse プロジェクトを生成するシェルスクリプトです。 |
|
|
|
Recipe を書こう
前準備
Section |
---|
Column |
---|
| 今回は Jenkins をインストールする Recipe を書くことにします。 そこでまずは Chef でなく、手作業で Jenkins をインストールする方法をおさらいしておきましょう。 (実行する必要はありません) コード ブロック |
---|
$ yum install java-1.7.0-openjdk
$ wget http://pkg.jenkins-ci.org/redhat/jenkins-1.576-1.1.noarch.rpm
$ yum install jenkins-1.576-1.1.noarch.rpm
$ service jenkins start
$ chkconfig jenkins on |
では、この手順を Recipe にするとどうなるでしょうか。 |
Column |
---|
Section |
---|
| Column |
---|
インストール先は CentOS 6.5 です。 他にもインストール手順は様々ですが、今回はこの手順でインストールするものとして進みます。 |
|
|
|
default Recipe を書く
Section |
---|
Column |
---|
| Cookbook のメイン Recipe をつくります。 内容は、Jenkins をインストールするものです。 コード ブロック |
---|
language | ruby |
---|
title | jenkins/recipes/default.rb |
---|
| # 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" do
source 'http://pkg.jenkins-ci.org/redhat/jenkins-1.568-1.1.noarch.rpm'
action :create_if_missing
end
# Jenkins をインストール
yum_pakcagepackage "#{Chef::Config[:file_cache_path]}/jenkins-1.568-1.1.noarch.rpm"
# Jenkins サービスを自動起動
service 'jenkins' do
action [:start, :enable]
end |
|
Column |
---|
Recipe Section |
---|
| Column |
---|
Recipe にはサーバーのあるべき状態を Resource として定義します。 ここでいう yum_package や remote_file、service などが Resource の定義です。 基本的な Resource 定義の書式は次のようになっています。 コード ブロック |
---|
<ResourceType> "ResourceName" do
<Attribute> "hoge"
<Attribute> "fuga"
action <Action>
end |
Resource がどのような Attribute や Action を持つかは ResourceType により様々です。 Chef のドキュメントを参照するとよいでしょう。 ヒント |
---|
title | 今回登場する ResourceType の概要とドキュメントのリンク |
---|
| |
|
|
|
|
Kitchen で試してみよう
...
Kitchen インスタンスを定義
Section |
---|
Column |
---|
Kitchen インスタンスを定義します。title | 720px | コード ブロック |
---|
| 作成した Cookbook を試すための実行環境(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 |
注意 |
---|
YAML 形式のファイルはインデントにタブを使えないので注意してください。 |
|
Column |
---|
| Section |
---|
| Column |
---|
Kitchen は Vagrant や EC2、Docker Engine などでインスタンスを起動して Cookbook の動作をチェックするためのツールです。 .kitchen.yml には Kitchen で起動するインスタンスの設定を定義します。 driver:高速・軽量な Docker Engine を使うように指定します。 provisioner:Chef Zero によるプロビジョニングを行うように指定します。 Docker Engine のコンテナのベース Image として centos:centos6 を使用するように指定します。 また、Jenkins の起動確認のために 8080 ポートをフォワーディングするように指定します。 suites:jenkins Cookbook を収束するように指定します。 |
|
|
|
お試し環境にプロビジョニングしてみよう
...
プロビジョニングの実施
...
Section |
---|
Column |
---|
| Kitchen インスタンスを起動し、Cookbook を転送してプロビジョニングを行います。 コード ブロック |
---|
$ kitchen converge |
|
Column |
---|
Section |
---|
| Column |
---|
`kitchen converge` コマンドを実行すると、.kitchen.yml の定義に従って Kitchen インスタンスが生成され、プロビジョニングが行われます。 |
|
|
|
Drawio |
---|
| |
---|
diagramName | kitchen.drawio |
---|
size | 500 |
---|
revision | 1 |
---|
|
ヒント |
---|
| Kitchen インスタンスへの ログイン
※ パスワードは 'kitchen'
Kitchen インスタンスの破棄 コード ブロック |
---|
$ kitchen destroy |
|
|
|
|
|
Web ブラウザで確認
.kitchen.yml の設定により、Kitchen インスタンスの 8080 ポートがホストマシンの 8080 ポートにフォワーディングされています。
ホストマシンの Web ブラウザで「http://localhost:8080」とアクセスしてみてください。
...
このように、Jenkins の画面が表示されていたら成功です。
ここまでくれば、まずひとつの Cookbook を作れたことになります。
作成した Cookbook は、Vagrant の VM や Knife Solo を使って他のサーバーへのプロビジョニングにそのまま使うことができます。
ChefsMeeting 本編ではより踏み込んで、実用的に使うための勉強をしています。
よろしければそちらもご参加ください。
本編の内容(一部)
- Vagrant の使い方
- Knife Solo の使い方
- Cookbook の自動テスト
- ガード条件、実践的な Recipe の書き方
- Attribute の使い方