2013年12月27日

イベント

第8回Jenkins勉強会にてプロモーション広告におけるCI/CDの取り組みについて発表しました #jenkinsstudy

  • このエントリーをはてなブックマークに追加

マーケティングソリューションカンパニー開発本部サービス運用部インフラ開発の石川です。

先日行われた第8回Jenkins勉強会にてプロモーション広告の継続的インテグレーション(以下、CI)/継続的デリバリー(以下、CD)に 関する取り組みについて紹介させていただきました。 タイトルは「Jenkinsはじめました」になっていますが、諸事情でタイトル通知後に少し内容を変更したため、 「はじめました」というよりは「結構使ってきました」というほうがしっくりくるかもしれません。

資料だけでは分かりにくい部分もありますので、このエントリーにていくつか補足したいと思います。 また、以下の内容においては具体的な数字や利用しているツールの詳細に触れることができない部分があります。 あらかじめご了承ください。

プロモーション広告におけるCI/CDの現状

今回はプロモーション広告での取り組みを事例として取り上げます。 プロモーション広告には検索連動型のスポンサードサーチやYDN(Yahoo!ディスプレイアドネットワーク)などがありますが これらの広告配信システムには多くのサブシステムが存在しています。 したがって改修などが行われた際はビルドやテストに多くの工数を割く必要がありました。 それらを改善するためにもCI/CDの導入は非常に重要でした。 現在は9割以上のコンポーネントのCI/CD適用が完了し、運用担当2名でも問題なくリリース作業が実施できる状態になっています。

プロモーション広告のCI/CDモデルは以下のようになります。

ci_model

JenkinsとGitHubEnterpriseを中心とした一般的な構成になっています。

これまでの道のり

始まりは3~4年ほど前、数名の有志による活動から始まりました。 当時は業務をこなす傍ら、CIツールの調査や各コンポーネントのビルド設定などを行っていました。 少しずつですが地道な活動が実を結び、CI対応チームが作成され、組織的な活動ができるようになりました。 その後はエバンジェリストとして情報共有や導入支援などのテクニカルサポートをするようになり、現在に至っています。

こうした活動が推進できたのには2つのポイントがあります。 1つは技術面として独自のビルド実行スクリプトです。 CI/CDの全社共通化というのはかなり難しいのですが、このスクリプトはそこを重点としており、 これまでに蓄積したノウハウを有効活用しつつ均一なレベルのCI/CDが部内に展開できるようになりました。

もう1つは上層部の理解です。 CI/CDの重要性を認識してもらえると同時に強力なサポートを得ることができました。

時間こそかかりましたが、こういったボトムアップの活動から私たちのCI/CDへの取り組みは完成に近付いてきています。

課題

これまで、そして現在もCI/CDを進めていく上でいくつか課題は出てきました。 例えば1つはGitHubEnterpriseの問題。 かつてSubversionを使用していた時の名残でそのままSCMポーリングを設定しているJenkinsジョブが多々ありました。 実際はポーリング以外の原因もありましたが、こういった幾つかの要因が重なってGitHubEnterpriseに大きな負荷を掛けてしまいました。 現在はJenkinsのGitプラグインによるWeb Hookを推奨しています。

他にはSlaveサーバーが挙げられます。 Jenkinsをうまく稼働させるにはSlaveサーバーは重要です。しかし、それには物理サーバーを用意するための予算も必要になります。 CI/CDを進めていく上でサーバー調達などではつまずいてほしくありません。 そこでJenkinsと仮想サーバーを連携する「JCloudsプラグイン」を社内向けにカスタマイズして用意しました。 幸いなことに社内ではOpenStackベースのプライベートクラウドが稼働を開始しましたので、そちらに合わせています。 このプラグインを使用することで自動ビルドを行う時にオンデマンドで仮想サーバーを自動構築して、そこで自動ビルドを実施、 終了後は仮想サーバーの自動削除までを行うことが可能です。 これによりSlaveサーバーとして仮想サーバーを占有してしまうよりもクラウド側のリソースの節約になります。 実際のところはOpenStackを構築するのにもサーバーは必要になりますが、クラウドの活用方法は他にもありますので、 その一端としてJenkins連携で利用するのは有効です。

他にも使わなくなったジョブの整理やテストコードの充実なども課題として挙げられます。 また、課題というよりは挑戦でありますが「Blue Green Deployment」や「Immutable Infrastructure」の実践も 今後取り組んでいきたいと考えています。

まとめ

これまでの取り組みからCI/CDを進める上で見えてきた2つの重要なポイントがあります。

1つ目はエバンジェリストの存在です。 ボトムアップからCI/CDを推し進めるのは非常に大変ですが、 重要性を理解し、周囲にそれを伝え、そして巻き込むという点でエバンジェリストは重要になってきます。 また、特に重要になってくるのが開発プロセスや考え方の見直し、その啓発活動になります。

2つ目はまず挑戦してみる、ということです。 ルールは当然必要になりますが、それらは必要に応じて随時見直していくという対応で構いません。 最初は少し緩めのルールで取っ掛かりを作り出し、そこから拡大していくことが大切です。 特に最初から縛り付けてしまうとやる気のある周囲の人の活動を阻害してしまいますのでご注意ください。

このようにして今日もJenkinsは休まず自動ビルドや自動デプロイを繰り返し、開発プロセスは途切れることなく循環しています。 より爆速な開発、より爆速なサービスの提供のため今後もプロモーション広告ではCI/CDを推し進めていきます。

最後に

マーケティングソリューションカンパニーではエンジニアを募集しています。 大規模システムで開発や運用、CI/CDに取り組んでみたい方、是非ご応募ください。 詳細に関しては採用情報をご覧ください。

Yahoo! JAPANでは情報技術を駆使して人々や社会の課題を一緒に解決していける方を募集しています。詳しくは採用情報をご覧ください。

  • このエントリーをはてなブックマークに追加