PHP勉強会126回にて発表した内容です 後ろの2枚は発表では使用しなかったものの、もったいないので、適当につけただけですので、無視しちゃってください
タグでデプロイするPHP勉強会 #1262018/05/30株式会社ニジボックス @niisan-tokyo
View Slide
ワタシ● 右の写真の顔をしたおっさん● エンジニア歴 6年くらい● PHPer歴 ≒ エンジニア歴● 現在の所属会社、ニジボックス歴は2.5年くらい● 最近のブームは機械学習で音楽生成するっていうテーマ● PCを買い替えてしまった● 地球防衛軍5継続中● 業務ではGitLabを使用しています
お品書き● タグとリリース● タグとCI● タグデプロイとコンテナ● まとめ
タグとリリース
gitのタグ特定のコミットにつける、目印4ggh9wrtrh9854w08ygrar hoge_tagrh9854w コミットメッセージタグメッセージ
タグとリリースGitHubではリリースの目印にタグを使っている
タグとリリースGitlabでもUIでタグをつけるときに、リリースノートという独自のメッセージをつけることで、リリースを意識している
タグにリリースの意味を持たせることができる※ タグ自体はただの目印でしかないので、リリースの意味を持たせているのは、開発者側である
タグをつけたらデプロイでええやん!※github flow だと、master はいつでもデプロイできる状況にってあるけど、いつ何をデプロイしたかとか、やっぱり知っておきたいやん?そこまでコードに自信があるわけではないので、 QA確認済みのコミットをデプロイしたいっていうのが本音
タグとCI
タグとCI● タグつけてデプロイしたい● でも、手動でやるとか面倒だし失敗しそう● CIでタグ付け感知したらデプロイやってくれるとかできたら楽だなぁ
よく使うカジュアルなCI● Travis CI● Circle CI● GitLab CI
タグとCI ( Travis CI )https://docs.travis-ci.com/user/customizing-the-build/(適当意訳) v1.3みたいなフォーマットのタグをビルドにつけたいなら、 /^v\d+\.\d+(\.\d+)?(-\S*)?$/ みたいな正規表現でビルドのリストに追加できるよtags っていうフィールドつけるわけにはいかなかったのか、ちょっと不思議
タグとCI (Circle CI)https://circleci.com/docs/2.0/configuration-reference/#filters-1一応、特定のタグをCIのトリガーにすることはできるなぜか、上記のExampleにタグをCIに取り入れる例が存在しない
タグとCI (GitLab CI)タグをつけた時だけ jobが走るっていう設定があるtagの絞り込みの方法はよくわからないリリースにしか使わないと割り切れば問題ない?
タグデプロイとコンテナ( GitLabの例 )
masterブランチとタグの役割分担● テストを通す● 動作用のDocker imageを作る● 開発用の環境変数を込めて、ステージング環境にコンテナをデプロイ● 本番用の環境変数を込めて本番環境にコンテナをデプロイmasterプッシュ タグづけ
コンテナイメージを介したmasterとタグの協調accept merge requestコンテナイメージステージング環境本番環境tag v1.2.xmaster
コンテナデプロイの手順1. デプロイ対象のコミットにタグをつけます※ GitlabのタグはUI上でつけられるので、niisan 不在でもデプロイができるのだ
コンテナデプロイの手順2. 終わりCI完了したら、slackに通知する
こんなところが気に入っている● タグをつけるという明確なスイッチがある● CIがデプロイやってくれるので、ミスることは (多分) ない● ステージングで動作確認したコンテナがデプロイされるので、(よっぽどのことがない限りは) 動作保証されている
気をつけたい点CIの魔境化 & 属人化この時点でやばい意味不明な設定群恐怖を感じる
まとめ● 今更だけど、リリースバージョンとしてタグを意識してみる● タグとリリースが同一視できるのなら、タグをつけた時にデプロイするのが筋だと考える● 幸い、CIとタグ付けが連携できる場合が多いので、タグ付けした後のデプロイを自動化できる● コンテナ運用はタグ付けデプロイとの相性がいいように思う● CIの魔境化には注意してね
ご静聴ありがとうございます!!!
タグ付けがリリースならば...● そもそもリリースってなんだ?● サービスとかだったら本番デプロイだよな● だったら、タグ付けしたら、本番デプロイするってことでいいかな● デプロイ手動でやるの面倒臭い● だったら、CIで回せばいいんじゃないか?● CIって、タグに反応してくれるの?
コンテナイメージを使ったタグデプロイの要点● masterがプッシュされた時点で、コンテナのイメージが作成され、そのままステージングにデプロイされる● このとき、コミットハッシュがイメージのタグに付与される● コミットにタグが付与されると、対象のコミットハッシュをタグに持ったイメージが本番環境にデプロイされる● ステージングにデプロイされたものと環境変数を除いて全く同じ ( であると信じている ) 動作環境が本番にデプロイされている● ステージングと本番の同一性を確保することができる