「Jenkins ユーザ・カンファレンス 2015 東京」 において 「はてなにおける継続的デプロイメントの現状と Docker の導入」 という発表を行いました

アプリケーションエンジニアの id:nobuoka です。 現在は 「少年ジャンプルーキー」 の開発に携わっています。 面白い漫画作品が数多く集まっておりますので、是非ご覧ください!

さて、去る 1 月 11 日に 「Jenkins ユーザ・カンファレンス 2015 東京」 が開催されました。 はてなからも 「はてなにおける継続的デプロイメントの現状と Docker の導入」 というタイトルでセッション発表を行いました。 ここに発表資料を公開します。

発表資料

概要

内容としては次の 3 点です。

  • はてな全体のサービス開発と Jenkins についての概要
  • 「少年ジャンプルーキー」 の開発プロセスと Jenkins の活用
  • 開発中の機能を確認するための web アプリケーションを Docker で動作させるために Jenkins で Docker ビルドを行う

開発プロセスの中での Jenkins の活用については、良い感じに使えてる部分も課題だと感じている部分もそのまま紹介しています。 課題だと感じている部分の一部は、基調講演でも説明されました 「Workflow Plugin」 を使うことで解決できそうですので、今後 Workflow Plugin を試していきたいと思っています。

開発中の機能を確認するための Web アプリケーションを動かす仕組み (社内では devhost と呼んでいます) を Docker Engine を用いて構築するという取り組みは、先進的な取り組みの 1 つだと思っています。 Docker Engine の活用法の 1 つの事例として参考になれば幸いです。

質疑応答

時間の都合上すべての質問を受け付けることができなかったのですが、3 点の質問を頂きましたので紹介します。

Feature ブランチのテストをするときにマージしてからテストしているのかどうか

「Jenkins 上で feature ブランチのテストをするときに、Jenkins 上で devel ブランチにマージしてからテストしているのかどうか」 という質問でした。 はてなでは、現在のところそういうことは行っていません。

そもそもそういう発想がなかったのですが、気軽にローカルリポジトリでマージしたりできるのが Git の利点でもありますし、確かに Jenkins 上で devel ブランチにマージしてからテストを実行するというようなことをした方が良いですね。 今後取り組んでいきたいと思います。 *1

devhost 用の DB はどのようにしているのか

「確認用の web アプリケーション (devhost) を複数立ち上げるとき、それらの DB はどこにあるのか」 という質問でした。 「少年ジャンプルーキー」 の開発の場合は、開発用の DB が (devhost が動いているサーバーとは別のサーバー上に) 1 つあり、すべての devhost がそれを参照するという形になっています。

「スキーマ変更への対応はどのようにしているのか」 ということも質問されましたが、スキーマ変更が web アプリケーションの動作に悪影響を与えないようにしています *2 ので問題ありません。 稀に DB を分けたいこともありますが、その場合はその時々で適切に対応しています。

devhost は web アプリケーションが正しく動作することを確認するためのものではない (デバッグ用途ではない) ので開発用 DB の運用は上記のようになっていますが、デバッグに用いる場合はブランチごとに別々の DB を用意する必要があるでしょう。

End-to-End テスト

「End-to-End テストにどういうツールを用いているか」 という質問でした。 現在のところ少年ジャンプルーキーの開発時には End-to-End テストは行っていません。 社内的には PhantomJSCasperJS といったツールがよく用いられています。

終わりに

はてなのセッションにも多くの方に集まって頂きましたし、カンファレンス全体を見ても非常に盛り上がったものであったと感じます。 発表者としても参加者としても多くの刺激を受けたカンファレンスでした。

カンファレンスを企画された日本 Jenkins ユーザ会の皆様をはじめ、関係者の皆様やスピーカーの皆様、参加者の皆様、本当にありがとうございました。

採用情報

はてなでは、開発プロセスを積極的に改善していけるソフトウェアエンジニアも募集しています!

*1:GitHub pull request builder plugin を使うとうまくできるのではないかと思います。

*2:必要であれば、先に web アプリケーションのコードを変更します