ChatOpsなデプロイ環境(Github / Hubot / Slack / Circle Ci / Capistrano)
概要
こんにちは(こんばんわ?)最近犬派から猫派に転じたnisitomoです。 ※26年間猫嫌いでしたが、ひょんなことから好き派に・・・
今携わっている案件ですが、リリース作業がまだ中途半端な自動化に留まっており リリースブランチ作成して develop→masterプルリク作って capistranoコマンドをローカルで実行して・・・ となんか中途半端な感じでした・・・ やっとこさ、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
Hubot→github pull request作成
ここまでで、slack経由でhubotを起動することができました。 そしたら次に、hubotでgithub pull requestsを作成できるようにしていきます。
下記を使いました。これはベースは、github-pull-requestsを動かすjsスクリプトになります。
- ベース
- https://github.com/motemen/git-pr-release
- hubot版
- https://github.com/ttskch/hubot-github-pr-release
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から呼び出してみます
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とかで話しかけて連動とか、やってみようかなとか思ってます。 以上です。