読者です 読者をやめる 読者になる 読者になる

kentana20 技忘録

技術ネタを中心に、セミナー、勉強会、書籍、会社での出来事を綴っていきます。不定期更新。

一休.com での ChatOps

CI Hubot Slack ChatOps

はじめに

こんにちは @kentana20 です。一休.comの中で自動化や開発フローの整備・改善などを担当しています。

本エントリはChatOps Advent Calendar 2015の14日目の記事です。一昨日は @treby さんが

というタイトルで、趣味で作成されたBotを紹介いただきました。

今日は、 一休.com でのChatOps活用事例をいくつかご紹介したいと思います。

一休で使っているツール

一休では以下のツールを連携してChatOpsを整備しています。 比較的よくある組み合わせだと思います。

カテゴリ ツール
Chat Slack
Bot Hubot
CI Jenkins
E2Eテスト Selenium
VCS GitHub Enterprise
タスク管理 Redmine

一休.com でのChatOps

リリース運用はChatOps

業務効率化で一番よくあるケースの1つだと思います。リリースに絡む運用はChatOpsで行っています。

  • リリース用のプルリクエスト作成

一休.com ではProductionへのリリースを行う場合にmasterブランチからreleaseブランチにプルリクエストを出し、リリース内容の確認を行っており、このプルリク作成をBot+CIジョブで行っています。

f:id:kentana20:20151214124855j:plain

こんな感じで、コマンドを投げて

f:id:kentana20:20151214124907j:plain

こんな感じのプルリクを作っています。プルリク作成には ghqgore などでお馴染みの motemen さん作成の git-pr-release というGemを少しカスタマイズして使っています。

直近までは、その後のタグ作成などもSlack経由で行っていましたが、現在ではreleaseブランチへのmergeをトリガーに自動化しているので使うことはなくなりました。

ST/ProductionへのE2EテストもChatOps

一休.comではST/ProductionへのデプロイフローにSeleniumによるE2Eテストを組み込んでいます。 (E2Eテストについて、詳しくは↓のスライドをご覧ください)

これも、Slack+Hubot+Jenkinsを組み合わせて、いつでも誰でも実行できるようにしています。

f:id:kentana20:20151214124939j:plain

こんな感じですね。カンタンです。

チームの朝会もChatOps

開発チームはデイリースタンドアップ的な共有を毎朝やっており、その運用にもChatOpsを活用しています。

  • 朝会用のエントリ作成

一休.com では週に1回は形式を変えて、マネジメント的な共有事項や開発ユニット毎のアップデートの確認として30minくらい時間をかけて実施しています。この週1回の朝会はQiita Teamで事前エントリを書いて行うので、朝会エントリはHubotのcronを使って自動化し、作成したエントリのリンクをSlackに通知しています。

f:id:kentana20:20151214124953j:plain

週のうち、ほかの4日間は共有事項のみのデイリースタンドアップなので、Hubotを使って朝会通知とファシリテータのアサインを行っています。ファシリテータはユニット単位なのですが、そのユニットに合った画像を添えて賑やかに(?)朝会が始まります。

f:id:kentana20:20151214125011j:plain

日々の開発の中でもChatOps

少し変わった例としては、開発中のブランチを共用環境にデプロイするときにもChatOpsを活用しています。 これはSlack上で

  • 共用環境の番号
  • ブランチ名

を指定してデプロイコールをすると、指定した環境に、指定したブランチがデプロイされる、というもので主にプルリクのレビュー時に使ったり、マーケティングやカスタマーサービスといったエンジニア以外のメンバーにデモをするときに使っています。

f:id:kentana20:20151214125024j:plain

こんな感じでリリース前の環境を自分の手元ではない共用環境に気軽にデプロイできるようにしています。

おもしろ事例

開発ユニットによっては hubot-cron を利用して、ユニット内の運用をHubotとともに行っているケースがあるので、紹介します。

  • 休日当番のリマインド

休日の当番という制度があるのですが、その当番をBotがリマインドしてくれます。なんと占い、ラッキーアイテム、ラッキーカラーを添えてくれる、というなんとも気の利いた仕様です。

f:id:kentana20:20151214143939j:plain

  • とりとめのない話

朝会直後に来る、完全にムチャぶりBotです。ムチャぶり過ぎたためか、いまはこのBotはなくなってしまいました。。

f:id:kentana20:20151214143952j:plain

今後やりたいこと

グラフレポート

少し前に Kaizen Platform の Glide Noteさんが 「ChatOps + NightmareでメトリクスグラフとBIレポートをSlackに投げるようにした」 という記事を書かれていて、とても良さそうに感じたので

  • Kibanaのダッシュボード
  • 主要導線の平均レスポンスタイム

などをメトリクス化して、朝会の時間に通知するといったことを行いたいと思っています。

所感

ChatOpsについてこの1年半くらい開発・運用をしてきて思うのは

  • 「使いドコロによっては、開発者に負担をかける面もある」

ということです。自分はこういった仕組みはとても好きなのでChatOpsで運用を整備しがちなのですが、ヘビーに使わない開発者にとってはChatのコマンドは覚えづらいですし、運用の性質によってはChatOpsに載せたほうが良いものとそうでないものもあると思います。

たとえば、さきほど紹介した共用環境へのデプロイについて最近、簡易的なWebアプリから行えるようにしたのですが、その結果、活用頻度がさらに上がったように思います。

使いドコロによってはChatOpsは他の手段に置き換えた方が開発フロー全体の改善につながるのかもしれません。

おわりに

まだほかにも事例はいくつかありますが、 一休.com でのChatOps事例をいくつか紹介しました。

こうしてふりかえってみると「いろいろやっているな」ということを再認識できると同時に

  • 活用できているものとあまりできないかったものの棚卸しができる
  • 「こういったことができるかも」と思考の幅が広がる

といった面でとても有用でした。

昨年は別のAdvent Calendarに参加させていただいたのですが、年末にこういったイベントがあると年内に脳内の大掃除をしている感覚になってとっても良いです。こういった場を作ってくださっているQiitaやイベントを成立させている皆さまに、この場を借りて感謝申し上げます。

来年も前進を続けて、さらに良い現場を目指して行きたいですね。

明日は、参加登録がないので次回は 12/16(水) で @q_goma さんです。よろしくお願いします!