Copyright Drecom Co.,Ltd. All Rights Reserved.
インフラCIの全体像(開発ビルド)
社内Jenkinsサーバ
ソースをclone
JenkinsがVagrantで
AWSなどにVMを立て
て、itamaeのレシピと
Serverspec実行
8.
Copyright Drecom Co.,Ltd. All Rights Reserved.
インフラCIの全体像(イメージビルド)
ソースをclone
packerでitamaeとServerspecを実行
して、問題なければイメージ( AMIや
テンプレート)を作成する
社内Jenkinsサーバ
AMI
テンプレート
Copyright Drecom Co.,Ltd. All Rights Reserved.
サンプルコード
recipe.rb
package 'nginx' do
action :install
end
service 'nginx' do
action [:enable, :start]
end
● itamae local recipe.rb
● itamae ssh --host host001.example.jp recipe.rb
12.
Copyright Drecom Co.,Ltd. All Rights Reserved.
Chef -> itamae
● 弊社だと元々CentOS 6環境をChefでプロビジョニングしてい
た
○ ドリコムのInfrastructure as code
http://www.slideshare.net/y05_net/infrastructure-as-co
de-35373108
● CentOS 7移行時にChefのレシピを全部itamaeに置き換えた
○ レシピ数は全部で30~40くらい
○ 過渡期でインフラエンジニア2人 + アプリエンジニア4人くら
いがかりで2~3ヶ月
○ 既存サービスはそのままで、新規サービスは全てCentOS
7で作成
13.
Copyright Drecom Co.,Ltd. All Rights Reserved.
itamaeを導入した理由
● vs Chef
○ ChefはRuby製だけどRuby以外に覚えること(Chefの独
自ルール)が多くて初見だと学習コスト高そうだった
○ itamaeは普通のRubyのgemでRubyを知っていれば他に
覚えることは少ないのでアプリエンジニアにもとっつきやす
い
○ 当時6人中3人がitamae使えたのでチーム内で教えれば
なんとかなるだろうという思い
● vs Ansible
○ 検討材料としては挙がったけど、Ruby書ける人が多かっ
たので流れでitamaeになった
14.
Copyright Drecom Co.,Ltd. All Rights Reserved.
使っているツール:Serverspec
● http://serverspec.org/
● RSpec(Rubyのテスティングフレームワーク)をベースにした、
インフラ構成をテストするためのツール
● インフラ構成のテストをするツールだとこれがデファクトスタン
ダード
● itamaeで実行したプロビジョニングが本当に設定されてるかど
うかの検証をしている
15.
Copyright Drecom Co.,Ltd. All Rights Reserved.
nginx_spec.rb
describe package('nginx') do
it { should be_installed }
end
describe service('nginx') do
it { should be_enabled }
it { should be_running }
end
サンプルコード
16.
Copyright Drecom Co.,Ltd. All Rights Reserved.
使っているツール:Vagrant
● https://www.vagrantup.com/
● HashiCorp社が作った仮想環境の構築ツール
● VirtualBoxやAWSなどを同一インターフェースで扱える
● プラグイン導入することでいろんな環境で使える
Copyright Drecom Co.,Ltd. All Rights Reserved.
開発ビルド用のジョブ
● マルチ構成プロジェクトにして、1つのジョブで同時に複数ビル
ドが実行できるようにしてる
● Jenkins 2.0の新機能のpipelineを使いたいけど、複数のジョ
ブのコンソールログが1ヶ所になって混ざってしまうので移行は
してない
22.
Copyright Drecom Co.,Ltd. All Rights Reserved.
開発ビルド用のジョブ
縦の軸はどのクラウドに対してプロビジョニングをするかどうか
● 対応するVagrantプラグインをインストールして
● vagrant up --provider=$PROVIDER みたいな感じで実行
$
P
R
O
V
I
D
E
R
23.
Copyright Drecom Co.,Ltd. All Rights Reserved.
開発ビルド用のジョブ
横の軸は使用するnodeファイル(設定ファイル)
● リポジトリにコミットしてるのはdefault.yml(role全無し)だけだ
が、ビルド時にrolesを全部付与したyml(role_all.yml)を生成
してビルドを実行することにより、role全有り、全無しを両方テ
ストしてる
$NODE
24.
Copyright Drecom Co.,Ltd. All Rights Reserved.
イメージビルド用のジョブ
● プルダウンでパラメータを切り替えている
● 弊社だとサービス単位(費用が発生する請求単位)で AWSや
IDCFのアカウントが複数分かれているので、作成先のアカウ
ントを選択できるようにしてる
○ クラウドによってはアカウント間でのイメージ共有ができる
ので不要なんだけど念のため
25.
Copyright Drecom Co.,Ltd. All Rights Reserved.
イメージビルド用のジョブ
● パラメータが多いけど、Rebuilder Pluginで一度使ったパラ
メータを使いまわせるようにしてるので2回目以降はそんなに
大変ではない
○ https://wiki.jenkins-ci.org/display/JENKINS/Rebuild+Pl
ugin
● イメージ作成に成功したらgitのtagを作り、かつイメージにも
tagと同じ名前をつけることにより、イメージからどの時点の
ソースコードを元にビルドしたかが特定できるようにしてる