Upgrade to Pro — share decks privately, control downloads, hide ads and more …

タグ付けデプロイの話

 タグ付けデプロイの話

PHP勉強会126回にて発表した内容です
後ろの2枚は発表では使用しなかったものの、もったいないので、適当につけただけですので、無視しちゃってください

NIIKURA Ryota

May 30, 2018
Tweet

More Decks by NIIKURA Ryota

Other Decks in Technology

Transcript

  1. タグでデプロイする
    PHP勉強会 #126
    2018/05/30
    株式会社ニジボックス @niisan-tokyo

    View Slide

  2. ワタシ
    ● 右の写真の顔をしたおっさん
    ● エンジニア歴 6年くらい
    ● PHPer歴 ≒ エンジニア歴
    ● 現在の所属会社、ニジボックス歴は2.5年くら

    ● 最近のブームは機械学習で音楽生成するって
    いうテーマ
    ● PCを買い替えてしまった
    ● 地球防衛軍5継続中
    ● 業務ではGitLabを使用しています

    View Slide

  3. お品書き
    ● タグとリリース
    ● タグとCI
    ● タグデプロイとコンテナ
    ● まとめ

    View Slide

  4. タグとリリース

    View Slide

  5. gitのタグ
    特定のコミットにつける、目印
    4ggh9wrt
    rh9854w
    08ygrar hoge_tag
    rh9854w コミットメッセージ
    タグメッセージ

    View Slide

  6. タグとリリース
    GitHubではリリースの目印
    にタグを使っている

    View Slide

  7. タグとリリース
    GitlabでもUIでタグをつけるときに、リ
    リースノートという独自のメッセージを
    つけることで、リリースを意識してい

    View Slide

  8. タグにリリースの意味を
    持たせることができる
    ※ タグ自体はただの目印でしかないので、リリースの意味を持たせているのは、開発者側である

    View Slide

  9. タグをつけたらデプロイでええやん!
    ※github flow だと、master はいつでもデプロイできる状況にってあるけど、いつ何をデプロイし
    たかとか、やっぱり知っておきたいやん?
    そこまでコードに自信があるわけではないので、 QA確認済みのコミットをデプロイしたいっていう
    のが本音

    View Slide

  10. タグとCI

    View Slide

  11. タグとCI
    ● タグつけてデプロイしたい
    ● でも、手動でやるとか面倒だし失敗しそう
    ● CIでタグ付け感知したらデプロイやってくれるとかできたら楽
    だなぁ

    View Slide

  12. よく使うカジュアルなCI
    ● Travis CI
    ● Circle CI
    ● GitLab CI

    View Slide

  13. タグとCI ( Travis CI )
    https://docs.travis-ci.com/user/customizing-the-build/
    (適当意訳) v1.3みたいなフォーマットのタグをビルドにつけたいなら、 /^v\d+\.\d+(\.\d+)?(-\S*)?$/ みたいな正規表現
    でビルドのリストに追加できるよ
    tags っていうフィールドつけるわけにはいかなかったのか、ちょっと
    不思議

    View Slide

  14. タグとCI (Circle CI)
    https://circleci.com/docs/2.0/configuration-reference/#filters-1
    一応、特定のタグをCIのトリガーにすることはできる
    なぜか、上記のExampleにタグをCIに取り入れる例が存在しない

    View Slide

  15. タグとCI (GitLab CI)
    タグをつけた時だけ jobが走るっていう設定
    がある
    tagの絞り込みの方法はよくわからない
    リリースにしか使わないと割り切れば問題な
    い?

    View Slide

  16. タグデプロイとコンテナ
    ( GitLabの例 )

    View Slide

  17. masterブランチとタグの役割分担
    ● テストを通す
    ● 動作用のDocker imageを作る
    ● 開発用の環境変数を込めて、ス
    テージング環境にコンテナをデプ
    ロイ
    ● 本番用の環境変数を込めて本番
    環境にコンテナをデプロイ
    masterプッシュ タグづけ

    View Slide

  18. コンテナイメージを介したmasterとタグの協調
    accept merge request
    コンテナ
    イメージ
    ステージング環

    本番環境
    tag v1.2.x
    master

    View Slide

  19. コンテナデプロイの手順
    1. デプロイ対象のコミットにタグをつけます
    ※ GitlabのタグはUI上でつけ
    られるので、niisan 不在でもデ
    プロイができるのだ

    View Slide

  20. コンテナデプロイの手順
    2. 終わり
    CI完了したら、slackに通知する

    View Slide

  21. こんなところが気に入っている
    ● タグをつけるという明確なスイッチがある
    ● CIがデプロイやってくれるので、ミスることは (多分) ない
    ● ステージングで動作確認したコンテナがデプロイされるので、
    (よっぽどのことがない限りは) 動作保証されている

    View Slide

  22. 気をつけたい点
    CIの魔境化 & 属人化
    この時点でやばい
    意味不明な設定群
    恐怖を感じる

    View Slide

  23. まとめ
    ● 今更だけど、リリースバージョンとしてタグを意識してみる
    ● タグとリリースが同一視できるのなら、タグをつけた時にデプロイするのが筋だと考
    える
    ● 幸い、CIとタグ付けが連携できる場合が多いので、タグ付けした後のデプロイを自
    動化できる
    ● コンテナ運用はタグ付けデプロイとの相性がいいように思う
    ● CIの魔境化には注意してね

    View Slide

  24. ご静聴ありがとうございます!!!

    View Slide

  25. タグ付けがリリースならば...
    ● そもそもリリースってなんだ?
    ● サービスとかだったら本番デプロイだよな
    ● だったら、タグ付けしたら、本番デプロイするってことでいいかな
    ● デプロイ手動でやるの面倒臭い
    ● だったら、CIで回せばいいんじゃないか?
    ● CIって、タグに反応してくれるの?

    View Slide

  26. コンテナイメージを使ったタグデプロイの要点
    ● masterがプッシュされた時点で、コンテナのイメージが作成され、そのままステージ
    ングにデプロイされる
    ● このとき、コミットハッシュがイメージのタグに付与される
    ● コミットにタグが付与されると、対象のコミットハッシュをタグに持ったイメージが本番
    環境にデプロイされる
    ● ステージングにデプロイされたものと環境変数を除いて全く同じ ( であると信じてい
    る ) 動作環境が本番にデプロイされている
    ● ステージングと本番の同一性を確保することができる

    View Slide