たまにはエンジニアらしい事したい!
みなさんこんにちは。
ここ最近、「君からビールを取ると泡しか残らない」とシャッチョサンから言われたんですけども、これは褒め言葉として受け取っておけばいいんでしょうかね?
(゜Д゜)
まあ、普段ビールばっか飲んでいるところしか見せられていないので、たまにはエンジニアらしいことをアレしておこうかなとか思ったりする今日この頃です。
……誰向けのアピールだよって話ですが。
_ノ乙(、ン、)_
ChatOpsにチャレンジ!
じゃあ……ってことで、いつぞやにどこかで話題になってたような気がしないわけでもないかもしれない「ChatOps」ってやつを自社に導入してみることにしませぅ。
まずは計画を立てよう!
漠然と「ChatOps導入するぞ!」っていっても、誰も使わないか誰かの手間を増やすだけのダメダメシステムが出来上がるのが関の山。
なので、ちょっと何をアレするか考えて見ましょう(´・ω・)(・ω・`)ネー
……と、考えて見たところ、社内WebシステムのデプロイをChatOpsで自動化したりしたらいいんじゃね?……って天の声が聞こえてきましたよ。
今までどうだったっけ?
っていうのもですね、今までのデプロイってこんな感じのフローだったんですよね。
- Featureブランチを作る
- 手元のPCでゴリゴリ開発
- テストサーバにPhpStormから転送(ここは自動)
- よさげならGitHubにCommit&Push
- PR作る
- masterブランチにマージする
- リリース資材をまとめる
- SFTPあたりで本番サーバに転送
- SSHでログイン
- 転送した資材を展開
- 展開した資材を適切な場所に配置
- 必要に応じてパーミッションとか調整
- ゴミを削除
……うん。文章にするとすげぇ手間(;´Д`)
何が問題なんだっけ?
このフローの何が問題なのか……ってのも考えてみましょうか。
ざっと思いつく範囲だと
- 手順が複雑
- サーバへのアクセス権が必要
- 「リリース資材を作る」という苦行が必要
- 「分かってる」人しかできない/やりにくい
って感じでしょうかね。
なんていうか、1〜6までは結構スマートなのに、それ以降がものすごくイケてないって感じがします。
どうするか?
要はイケてないところをスマートにすればOKって話なので、「こんな感じにしたいなー」ってのを整理しておきましょう。
イケてないのはリリース周り。ナウい言い方をすれば、デプロイ周りですね。ここをいい感じにしてみましょう。
- Featureブランチを作る
- 手元のPCでゴリゴリ開発
- テストサーバにPhpStormから転送(ここは自動)
- よさげならGitHubにCommit&Push
- PR作る
- masterブランチにマージする
- 未知なる力に目覚め、紋章が刻まれし左手に封印された漆黒の龍(ドラゴン)が放つ紅の裁きが大地を焦がす(デプロイ完了)
なんということでしょう……。あれだけ煩雑なデプロイ作業が、こんなにもシンプルに……。
いいですねいいですね。これでいきましょう( ̄ー ̄)
まずは下ごしらえから
とりあえず、自動化するためにはやることをシンプルにしておかないといけません。
もちろん複雑なプロセスを自動化するのも悪くはないですが、それがちゃんと動いているかをテストしたりとかメンドイですしね。KISSの原則ですよ。ええ。
コマンド一発で手動デプローィ
まず、コマンド一発で手動デプロイできるようにしましょう。これは結構簡単な話。
私たちはソースコードをGitHub.comのプライベートリポジトリにホスティングしているので……。
masterブランチ1)じゃなくてもいいんだけど、今回はそういう取り決めを常にリリース可能な状態にしておいて、git pull
で最新ソースゲットできるようにしておけばよさげ。
ってことで、まずはリポジトリからgit clone
してまいりませぅ……って流れになるわけですが、プライベートリポジトリなので、匿名で取ってくることができません!
そんなときは慌てず騒がず、「Deploy keys」を使いましょう。
細かい手順は上記サイトを参照されたし。
簡単に流れを書いておくと……
- デプロイの時に使う予定のユーザでSSHなキーペアを作成2)パスワードなしで
- GitHubの管理画面から公開鍵を登録
- そのキーを使って
git clone
って感じですね。
ここまでやったら、完成したも同然。ここを自動化すれば終わりですから( ̄ー ̄)
どのタイミングでデプロイする?
よくある構成だと、GitHubにPushしたらCI走ってOKならデプロイ……って感じにするんでしょうけども……。
当社はCIなんて使ってない3)主としてボクのやる気の問題によりし、Pushしたタイミングとデプロイしたいタイミングが違うケースも多々ある……と。
ので、別なきっかけでデプロイプロセスをキックしたいというニーズが。
じゃあってことで、会社で使ってるSlackを使いましょう。適当なチャンネルを作って、そこで魔法の言葉を唱えるとデプロイが始まる……的な。
長くなったので今回はここまで!
ってことで、後はこれを実際に作るだけなわけですが……。
余談が多すぎたせいか、長くなりすぎてしまったのでここまでにしておきましょう!