こんにちは。チーフエンジニアの国平です。
私事ですが、先日急な体調不良で急遽早退しました。
運悪く、その日は午後からリリース作業が予定されていたのですが、あまりにも体調が悪くリリースを延期することになりました。
この時のリリースは、シェアウィズだけでなく協業しているパートナーにも影響があり、ご迷惑をかける結果になりました。
(後日、無事リリースしました)
このようにいつ何が起こるかわからないので、エンジニアチームとしてトラックナンバーをコントロールするのは非常に重要になります。
シェアウィズでは、最低限の作業を誰でも行えるようにChatBotの導入を進めています。
今回は、このChatBotの Niorをご紹介します。
シェアウィズの課題
サービスの配備や運用について、社内には下記の問題がありました。
- 様々なシステムを少数のエンジニアで管理している
- デプロイなどは各サービスの担当エンジニアが、自分のマシンから実行している
- 担当エンジニアが不在の時にサーバ再起動や配備ができない問題があった
- 誰でもいつでもどこからでも必要な作業をできるようにしたい
この問題解決のためにChatOpsを導入することに決め、ChatBotの開発に着手しました。
要件
今回のシステムに必要な要件をまとめると下記のようになりました。
- 運用に必要な任意のタスクを実行できること
- 配備
- サーバプロセスの再起動
- 配備内容のロールバック
- 社内の全サービスに対応できること
- Scala + Play(開発着手当時)
- Ruby2.0 + Rails3
- Ruby2.4 + Rails4
- Ruby2.3 + Rails4
- Slackから操作できること
解決案
まとめた要件を解決するために下記の仕様に落とし込みました。
- SlackのBotにコマンドを送って実行させる
- Dockerを使ってサービスごとの必要な実行環境を立ち上げる
- Dockerコンテナ内で各サービスごとの配備コマンドを実行する
最終的な構成イメージが下図です。
このBotをScalaで作りこんでみました。
動かした様子がこちら↓
クロネコちゃんがお仕事してくれます。
開発にあたって考えたこと
開発を進めるにあたって、いくつか検討したことや考えたことをまとめます。
なぜHubotやRubotyを使わなかったか
以前からChatBot作るのが好きで、色々試していました。
シェアウィズに入社してから、半分趣味で作っていたChatBotがあったのですが、それが流用できそうだと思ったので、そのまま自作することにしました。
また、ruboty や hubot には、Dockerを利用できるpluginが既にありましたが、今回実現したいことは、Dockerを利用したいわけではなく、あくまでDeployだったため、利用を見送りました。
- ruboty-docker https://github.com/zchee/ruboty-docker
- hubot-docker https://github.com/smwa/hubot-docker
Noirの名前の由来は
私の前職では 飛脚 というデプロイ用のChatBotが活躍していました。
飛脚は非常によく出来たデプロイBotで、今回の実装にも大きな影響を受けています。
この飛脚をリスペクトした結果、飛脚 -> 宅急便 -> クロネコ -> Noir という連想ゲームで名前をつけました。
CIサービスなどで良かったのではないか
実際CIサービスでも実現は可能です。
ただ、今回やりたいのはCIではなくて、サービス運用なのでマッチしない様に思いました。
最後に
シェアウィズでは、エンジニアを募集しています。
ChatOpsなど積極的に導入しているので、興味のある方はぜひ下記採用ページからご連絡下さい。
コメント