Vagrant + Chef 勉強会 2014/06/28 Vol.1 開発環境構築編 #ChefsMeetingNagoya
自己紹介 伊東 宏起 @_nihi 来栖川電算 Infrastructure Support Engineer 最近は IPv6 に興味があります 社内では Zabbix 管理したり ネットワークの保守をしたり 来年からさくらインターネットで働きます はまじ @HmjKRS 来栖川電算 Development Support Engineer Vagrant + Chef を独学した人 普段は Jenkins や Atlassian 製品のプラグインを作ったり ふつうのプロジェクトのテストや CI したり 研修したり 引きこもり系エンジニア
開発環境を構築
Chef で作らなければいけないモノ Recipe メソッドのようなもの プロビジョニング内容を記述したコード remote_file "#{Chef::Config[:file_cache_path]}/gradle-#{version}-bin.zip" do source "http://services.gradle.org/distributions/gradle-#{version}-bin.zip" action :create_if_missing end default.rb package 'unzip' bash "install_gradle" do not_if { File.exists?("/usr/local/gradle-#{version}") } code <<-EOL unzip -q #{Chef::Config[:file_cache_path]}/gradle-#{version}-bin.zip -d /usr/local chmod 755 /usr/local/gradle-#{version}/bin/gradle EOL end Gradle のインストール Cookbook クラスのようなもの ひとつ以上の Recipe をとりまとめて名前をつけたもの default.rb default.rb default.rb gradle Cookbook
どうやって作るの Chef の開発環境も Chef + Vagrant で構築
どうやって作るの Chef の開発環境も Chef + Vagrant で構築 Git でこの環境を配布します
Vagrant の用語 Box Vagrant で管理される VM の総称 Provider Box を実現する仮想化ソフトウェア VirtualBox VMWareFusion Docker など Provisioner Box をセットアップする構成管理ツール ShellScript Chef Puppet Fabric Ansible など
まずは VirtualBox をインストール インストーラをダウンロードして実行 https://www.virtualbox.org/wiki/downloads
まずは VirtualBox をインストール VM の保存先を確認しておく ファイル -> 環境設定 -> 一般
Vagrant をインストール 環境変数 VAGRANT_HOME の設定 ~/.bash_profile export VAGRANT_HOME=/Users/hamaji/.vagrant.d box ファイルやプラグインなどの保存先 容量に余裕があり 特殊文字などを含まないパスを指定
Vagrant をインストール インストーラをダウンロードして実行 http://www.vagrantup.com/downloads.html
Vagrant プラグインをインストール vagrant-omnibus プラグイン ゲストマシンに自動的に Chef をインストール $ vagrant plugin install vagrant-omnibus vagrant-vbguest プラグイン VirtualBox の Guest Additions を自動的に更新 $ vagrant plugin install vagrant-vbguest
必要なファイルを配布します GIt リポジトリを clone $ git clone https://kurusugawa.jp/stash/scm/chef/chefs_meeting.git
VM の起動 Vagrantfile のあるディレクトリで vagrant up $ cd chefs_meeting/ $ vagrant up ユーザー vagrant パスワード vagrant
キーボードを切り替える方法 1 メインメニューから システム -> 設定 -> キーボード の順に選択
キーボードを切り替える方法 2 レイアウトタブから追加を選択
キーボードを切り替える方法 3 国 アメリカ合衆国 系列 英語 US を選択
キーボードを切り替える方法 4 英語 US をデフォルトのレイアウトにしたら OK
開発ツールの紹介 起動した開発環境にはどんなツールが入ってる
ChefDK しぇふでぃーけー http://www.getchef.com/downloads/chef-dk Chef Development Kit Chef の開発に必要なツールが全部はいったパッケージ ChefDK に含まれるツール Berkshelf Test Kitchen ChefSpec Foodcritic Chef Client Knife Ohai Chef Zero
Berkshelf ばーくしぇるふ http://berkshelf.com/ ChefDK に含まれる Cookbook の依存解決をするツール Berksfile に依存関係を書く 必要な Cookbook を自動ダウンロード OpscodeCommunity Git ローカルファイルシステム
Test Kitchen きっちん http://kitchen.ci/ ChefDK に含まれる Cookbook のテスト環境を提供するツール インスタンスの起動 プロビジョニング テスト実行を自動で.kitchen.yml に設定を書く インスタンスの定義 実行する Recipe や Attribute の定義 インスタンス Vagrant docker EC2 など プラグインで拡張 テストツール Serverspec Bats minitest
ChefSpec しぇふすぺっく http://sethvargo.github.io/chefspec/ ChefDK に含まれる Recipe に対する単体テストツール 主に DSL が正しく解釈されることを確認 使ってないです 規模の大きい Cookbook では有効かも
Foodcritic ふーどくりてぃっく http://acrmp.github.io/foodcritic/ ChefDK に含まれる Cookbook の静的テストツール お作法に違反したコードや 無駄なコードなどを検出
Serverspec さーばーすぺっく http://serverspec.org/ サーバーの状態をテストするツール Kitchen では にテストコードを書く./test/integration/default/serverspec/*_spec.rb ChefDK で使うには $ chef gem install serverspec
docker どっかー http://www.docker.com/ コンテナ型仮想化ソフトウェア カーネル上に独立したアプリケーション空間を構築 ChefDK Kitchen で使うには $ chef gem install kitchen-docker Docker Engine ですね
その他のツール Flay http://ruby.sadi.st/flay.html 重複コードを検出する Ruby の静的テストツール $ chef gem install flay Reek https://github.com/troessner/reek 複雑なコードを検出する Ruby 用の静的テストツール $ chef gem install reek Eclipse http://www.eclipse.org/ Cookbook のエディタとして使用
おわりに
来栖川電算 概要 10周年 名古屋工業大学発ベンチャー 2003年 目的 ロボの頭脳を作る 知的インターフェイスによる社会の変革 ソフトウェアの品質 生産性の向上 スタッフ 30人 役員3人 正社員11人 見習い10人 データ作成5人 家政婦1人 IPA未踏ソフトウェア経験者多数 社風 難しいことを楽しく 職人 挑戦 自由 昼食 夕食 飲み会は無料
スタッフ募集中 気軽にオフィスへ遊びに来てね 見学できて ご飯も食べれて 泊まれる 名古屋本社 2013フロア増設 東京本社 2012開設 イオン千種 名大病院 名工大の近く 入谷駅 鶯谷駅 上野駅の近く
http://kurusugawa.jp/