Jenkins ユーザ・カンファレンス 2012 東京に行ってきた

昨日のpyfesに引き続き、今日はJenkins ユーザ・カンファレンス 2012 東京に行ってきた。

大変に有意義な1日になったと思う。あと、ノベリティも充実しており、大事に使いたいと思う。企画者、スタッフ、参加者の皆さま、おつかれさまでした。

概要は公式サイトに紹介されているので、メモ&感想とかを簡単にまとめる。

Jenkinsプロジェクト現状報告とこれから

  • 今後の展開として、プラグインのセットやオススメの使い方などが表示されるようになるらしい。どのように活用すればよいのか、っていう指針がわかりやすくなるのは嬉しい機能。
  • Rubyによるプラグイン開発の体制が充実してきている。Pythonも充実してほしいところ。PythonプロジェクトのビルドとしてはShiningPanda Pluginがすごくいい出来ってことが、昨日のpyfesで分かったので、後はプラグイン開発体制…?
  • 全然Jenkinsと関係ないけど、川口さんのタイピングが速すぎて驚愕。

Jenkinsによる自動受け入れテストから継続的デリバリーまで

  • 「continuous quality」ってのがキーワードっぽい。ユニットテストから、ファンクショナルテスト、受け入れテスト、コードメトリクス、リリース候補の選定、テスト環境へのデプロイ、準本番(UAT)環境へのデプロイ、本番環境へのデプロイといった流れを自動化して、一貫して品質を作りこんでいく。
  • Fail Fast。早い段階で失敗させて通知する。
  • Build Pipeline Pluginで可視化。
  • ユニットテストでは、時間のかかるテストとそうでないテストを分けて、それぞれ別々のジョブとして定義する。
  • 受け入れテストでは、進捗や結果を公開する。すべて自動化するのが難しい部分では、手動テストを行うことになるけど、そういった場合、手動テストであることを明記しておくこと。また、フィードバックを自動化する仕組みが大事(QAより)
  • コードメトリクス。基準を満たさなければビルドを失敗させる。
  • テストを通してからスナップショットビルドを作る。Artifactory Pluginがオススメらしい。
  • デプロイの自動化にはDeployer Plugin、SSH Pluginが使える。

愛されるJenkins氏になるために

  • まったくテストも存在しない、それでいて癖のあるシステムの保守、機能拡張をすることになった時に、どうやってJenkinsを取り入れていくか。
  • 割り切りが大事で、新しく作る部分に関しては、しっかりとテストを書いて品質を保つ。ソーシャル系プロジェクトに特化した話題もあったけど、自分が前に関わったプロジェクトのことと照らし合わせて聞けた。

複雑な多段階ビルドに対処する: 事例紹介

  • 一つのPythonスクリプトで行なっていた処理を、プロセス毎にJenkinsのジョブとして定義し、様々なメリットを得たという話。オレオレスクリプトよりも実績のあるプラグインを使うべし。
  • Parameterized Trigger Plugin, Conditional Build Step Pluginといったプラグインをうまく使うことで、複雑なジョブのフローに対応する。

毎日が憧れの新築、反復可能なデリバリーによる常時新築システム

  • 自分が思い描く今現在の理想の継続的デリバリーの形にすごく近い形で、とてもためになった。
  • Jenkinsや各ツールを使うことで、Excelファイルを元に手動でやっていたデプロイ作業(理想で8人日、実際16人日かかっていた)が、60分でできるようになり、更にチューニングを行うことで10分、最低で2分程度に終わるようになったよ、という話。そういう意味で、実際のプロジェクトにも役に立ちそうな様々なTipsが盛り込まれていた。
  • テストと違ってデプロイは並列化が難しい。
  • デプロイの各プロセスは冪等性を保つべし(つまり、何度やっても同じ結果を得るようにしておくべきで、1回目では成功するけど2回目以降は失敗する、といったことになってはならない)
  • chefにおいて、設定ファイルではなく、設定ファイル作成プログラムを使うことで、Fail Fastを実現。結合テストフェースでなく、デプロイフェーズで問題を発見する。
  • 環境の使い捨て。
  • ブランチごとにデプロイ。
  • 継続的デリバリーには、自動化だけでなく、高速化も重要。

全体通して

デプロイ以降のフェーズ、つまり、継続的デリバリー関係の話や、導入事例に関する話が多く聞けて(意図的にそういうセッションを選んだのだけど)、非常に役に立った。

開発環境やステージング環境の構築の自動化は、昨日のpyfesでVagrantを使えばできそうな見通しは立ったし、それ以降のフェーズについては、Chef-soloを使って自動デプロイ、継続的デリバリーが実現できるはず。個人的に色々と試してみたいことが増えたし、モチベーションが上がったので、それだけでも来た甲斐があったというもの。

後は、Javaプロジェクト、Railsプロジェクト毎に異なるデプロイノウハウをうまく蓄積していった上で、Jenkinsでうまく吸収できるようになればいいなぁと思う。