夢を忘れない 働きすぎない 思ったことを口にする 友達を大事にする 幸せになる
6÷2(1+2)=?
この式は人の計算の仕方の違いが大きく出てくる。
"〜 1=2 について、アントニオ猪木"
〜 1=2 について、IT関係者"
〜 1=2 について、官能小説
──「うる星」の「ビューティフル・ドリーマー」のように原作とはちょっと離れた内容の映画は、ファンの間では長年議論の的になっていたりしますが。
あれは押井守監督の作品と割り切って、楽しく観ましたよ。
"— コミックナタリー - [Power Push] 「るーみっくわーるど35~SHOW TIME&ALL STAR~」高橋留美子画業35周年インタビュー (5/5)
Jenkins おじさんと戯れること半日、うまくいったので備忘録を残しておく。
やりたかったのは Chef で構築したサーバーを Jenkins で CI する、というもの。このときサーバーはテストが終わる度に破棄して、テスト開始時に再度真っ新な状態から立ち上げたい。(こういうサーバーを壊して作ってというテストはなんという名前で呼ばれるのだろう?)
- 仮想サーバーを破棄/作成をプログラマブルにやるのはもちろん Vagrant
- プロビジョニングは Chef
- Chef の環境を整えるのに knife-solo 0.3.0.pre3
- テストは serverspec
- コードは Github に上げる (https://github.com/naoya/jenkins-vagrant-test)
- CI は Jenkins
という構成になっている。ひとまず Jenkins や Vagrant はローカルの OSX に入れている。
レポジトリ
プロビジョニング用レポジトリのディレクトリは、knife solo で作ったもの。Vagrantfile もその中に入れる。
% bundle exec knife solo init jenkins-vagrant-test % cd jenkins-vagrant-test % vagrant init centos
この辺は Chef Solo + Vagrant を使う際のいつもの様子。
Gemfile
レポジトリ内に Gemfile を作って CI に必要な gem を列挙しておく。
source 'https://rubygems.org' gem "knife-solo", "~> 0.3.0.pre3" gem 'serverspec' gem 'rake' gem 'ci_reporter'
RSpec の出力を Jenkins 用にカスタマイズするため ci_reporter も入れておこう。
serverspec でテストを書いてレシピを書く。
特に変わったことはしていない。いつも通り
- serverspec は https://github.com/mizzy/serverspec のドキュメントなどを
- Chef Solo は 入門Chef Solo - Infrastructure as Code この辺がオススメですコポォ
ci_reporter で出力を出すためには serverspec の Rakefile に
require 'ci/reporter/rake/rspec'
を追記しとく。これで rake ci:setup:rspec spec で Jenkins が読める XML でのレポートが、テスト実行時に spec/reports/*.xml に吐き出される。
SSH 周りをどうするか
細かい話なのだけど、この構成で CI を回そうとするときに問題になるのが SSH 周りの設定。knife-solo も serverspec も Vagrant で立ち上げた仮想サーバーに ssh してごにょごにょするツールですが全部自動化しようとすると vagrant up したサーバーをどうやって名前解決するかというところで困る。
幸い
- Vagrant には
vagrant ssh-configで ssh 設定を出力するオプションがあり - knife solo には ssh 設定ファイルを指定するオプション (-F) があり
- serverspec は serverspec 本体を弄らなくても Net::SSH のオプションを触れる構成になっている
ので、vagrant ssh-config の出力をファイルに吐き出してそれを両者に読み込ませるようにすれば、課題は解決できる。つまり、Jenkins のビルド設定のシェルスクリプトは以下になる。
# 仮想サーバー起動 vagrant up # ssh 設定を出力 vagrant ssh-config --host=jenkingrant > vagrant-ssh.conf # gem 入れる bundle # bootstrap = prepare + cook : Chef入れてクックブック適用 bundle exec knife solo bootstrap jenkingrant -F vagrant-ssh.conf # serverspec でテスト実行 bundle exec rake ci:setup:rspec spec # 設定ファイル削除 rm -f vagrant-ssh.conf # 仮想サーバー破棄 vagrant destroy -f
serverspec の ssh 設定周りは spec/spec_helper.rb で Net::SSH::Config.for を読んでるところを
options = Net::SSH::Config.for(c.host, files=["vagrant-ssh.conf"])
とする。これで引数に与えたファイルも ssh の設定として使われる。
Jenkins 周りの設定
Git プラグインを入れて、ビルドの際に github からコードを取ってくるように設定し、ビルドの設定に先のシェルを入れている。特に変わったことはしていない。
これでビルドを実行すると Github のコードが pull されて、vagrant up で仮想サーバーが立ち上がり、Bundler で必要な gem が入って、knife solo でノードの Chef が最新になり、クックブックが適用されたノードに serverspec が走り、テストに問題なければサーバーが破棄される。この一連のテストは仮想サーバーの上げ下げそのほかがあって時間がかかるので CI に任せるのうってつけ。
普段クックブックを調整してその場でテストを回すのにはあらかじめ仮想サーバーを立てておいたものに、差分のクックブックを適用して serverspec でテスト、サーバーは破棄しない・・・みたいなのを Guard や Grunt なんかを使ってテスト保存のたびカジュアルに回す。一方、調整が終わったクックブックは他のクックブック含め真っ新なサーバーに適用してがっちりインテグレーションテストしてみないと予想外のことが起こるかもしれない。そのための CI をしたかった、というわけでした。
サーバー構築も継続的インテグレーションする時代です。
— http://d.hatena.ne.jp/naoya/20130520/1369054828 (via redtower)
(via act2012bl)
(Source: theamericankid)
—
Twitter / hazy moon (via hanemimi) (via kawabauer) (via tetris) (via thinkupstudio) (via nemoi) (via konishiroku) (via yaruo) (via lickkane)
定義づけされた他人の評価を確固たる自分の定義づけにしてしまう例 エリートは手におえない
(via kisato2clipnews)
(via nozma) (via konishiroku) (via petapeta)
(via tsutomuonoda) (via cubeon) (via tokunoriben) (via kiri2)
買収か
Flickr 雰囲気が変わった
Amazon.co.jp: アンドロイドは電気羊の夢を見るか? (ハヤカワ文庫 SF (229)): フィリップ・K・ディック, カバーデザイン:土井宏明(ポジトロン), 浅倉久志: 本
ジャケ買い。テーマに、人間とは?、共感、親切が織り込まれているらしい。




