Developers FP !

株式会社フリープラスの開発チームの技術ブログ

ChatOpsなデプロイ環境(Github / Hubot / Slack / Circle Ci / Capistrano)

概要

こんにちは(こんばんわ?)最近犬派から猫派に転じたnisitomoです。 ※26年間猫嫌いでしたが、ひょんなことから好き派に・・・

今携わっている案件ですが、リリース作業がまだ中途半端な自動化に留まっており リリースブランチ作成して develop→masterプルリク作って capistranoコマンドをローカルで実行して・・・ となんか中途半端な感じでした・・・ やっとこさ、ChatOpsなデプロイ環境できたので、まとめます。下記概略図。

chatopsな環境

SlackからHubotを実行させる

Hubotインストール

ここらへんを参考にまずは、ローカルでHubotが動く環境を構築 https://qiita.com/susuwatarin/items/019e0e701754161f7c4c

無事にローカルで動くことが確認できれば、herokuにデプロイしましょう! 下記pingと打って、PONGが返ってくればよし

up to date in 0.99s
wanko> [Fri Nov 17 2017 17:38:02 GMT+0900 (JST)] WARNING Loading scripts from hubot-scripts.json is deprecated and will be removed in 3.0 (https://github.com/github/hubot-scripts/issues/1113) in favor of packages for each script.

Your hubot-scripts.json is empty, so you just need to remove it.
[Fri Nov 17 2017 17:38:02 GMT+0900 (JST)] ERROR hubot-heroku-keepalive included, but missing HUBOT_HEROKU_KEEPALIVE_URL. `heroku config:set HUBOT_HEROKU_KEEPALIVE_URL=$(heroku apps:info -s | grep web.url | cut -d= -f2)`
[Fri Nov 17 2017 17:38:03 GMT+0900 (JST)] INFO hubot-redis-brain: Using default redis on localhost:6379

wanko> 
wanko> wanko ping
wanko> PONG

HubotをHerokuにデプロイ

下記参考

Slack→Hubot

下記参考にしました。 - https://qiita.com/bouzuya/items/2a200c9e8a45e2478bc2

integrationで、hubot urlをセットするところが現バージョンには見つかりませんでした。

Slack - Hubot(Heroku)ができれば、slackからhubotの動作確認をしてみます。

wanko ping

slackでhubot

Hubot→github pull request作成

ここまでで、slack経由でhubotを起動することができました。 そしたら次に、hubotでgithub pull requestsを作成できるようにしていきます。

下記を使いました。これはベースは、github-pull-requestsを動かすjsスクリプトになります。

github-pull-requestsでは、自動でmasterへのマージプルリクエストを作成してくれ 尚且つ、QA最適化(マージ対象のプルリクリスト)をリストしてくれる優れものです。(ローカルでやるだけでも有用)

$ cd /path/to/hubot
$ npm install --save hubot-github-pr-release

And add to external-scripts.json.
$ cat external-scripts.json
["hubot-github-pr-release"]

slackからプルリクエストを作成してみる

上記で準備万端なので、slackから呼び出してみます slack github-pull-request

Github→CircleCI経由でデプロイ

下記参考 - https://qiita.com/ysk_1031/items/f584a0599791bdba132a

CircleCiとGithubを連携させます。これは情報いっぱい転がっているので参考。 CircleCIとGithubを連携させることにより、githubのcommit,pull requestなどに連動して CIを行ってくれます。 上記にて作成したプルリクエストをマージします。マージすることによる CircleCIのCIは動作し、デプロイ作業を行ってくれます。 CircleCIの設定ファイル(circle.yml)の下記の部分が実行されることになります。

deployment:
   production:
    branch: master
    commands:
      - sh script/deploy-production.sh:
          timeout: 1500

script/deploy-production.shの中では capistranoによるデプロイと デプロイ完了時のslackへの通知を行っています。

#!/bin/bash

# circle ciのproductionから呼び出し
bundle exec cap production deploy

# deploy完了通知 slack
curl -X POST --data-urlencode "payload={\"channel\": \"#los\", \"username\": \"wanko\", \"text\": \"<!channel> 本番環境への反映が完了しました。確認お願いいたします。\", \"icon_emoji\": \":ghost:\"}" https://hooks.slack.com/services/xxxxxxxxxxxxxxxxxx

さいごに

これによっていままで

  • リリースブランチ作成して
  • develop→masterプルリク作って
  • capistranoコマンドをローカルで実行して・・・


30分程時間を取られていたところが、
2クリックで済む

ようになりました。

次は、amazon echoとかで話しかけて連動とか、やってみようかなとか思ってます。 以上です。