tjinjin's blog

インフラ要素多めの個人メモ

デプロイチェック用のスクリプトを作った話

About

この記事は LITALICO Engineers Advent Calendar 2021 2つ目 3日目の記事です。

株式会社LITALICOでSREグループのマネージャをしております、 tjinjinです。 今回はQA用の環境で使っているdeploy時の事前チェックスクリプトの話を書きます。

経緯

QA環境のデプロイフローは下記のようになっており、既存のQAに影響を与えないようにデプロイすることが求められています。

  • 各アプリケーションリポジトリにてPRを出し、developにマージ
  • マージ後自動でQA環境にはデプロイはせず、良きタイミングで開発チーム側でデプロイを実施
  • デプロイ実施後開発チーム側で動作確認をし、デプロイ完了

以上のように行っていますが、マイクロサービスで運用しているということもありいくつかの問題が発生し、デプロイ後に正常に動作しないというケースが起きてしまいました。

  • デプロイ時にアプリケーション間の依存関係があるため複数マイクロサービスのデプロイタイミングを合わせる必要がある
  • デプロイされているバージョンとの差分がわからず現在デプロイされているものとの差分がわからない
  • インフラ側の設定が必要なものを忘れてデプロイしてしまう(主に環境変数環境変数とアプリケーションの管理が分かれているのがそもそもの問題かもしれません)

そこでデプロイをする前に状態を確認し、差分を確認できるものを作りました。

どんなものか

アプリケーションのデプロイされているバージョンとこれからデプロイされているdevelopの内容を比較し、以下の変更点があれば出力します。

  • 新しくPRがマージされているか
  • 変更をチェックしているファイルに差分があるか(環境変数周り)

出力結果としては下記のようなものとなります。

$ python deploy_check.py test
...
...
[hogehoge-application] Detect updated. Please check diff.
[hogehoge-application] compare_url: https://github.com/github_org/hogehoge-application/compare/masked_hash...develop
[hogehoge-application] Include PRs bellow. -----
[hogehoge-application] title: composer update @ 20211110012333
[hogehoge-application] link: https://github.com/github_org/hogehoge-application/pull/79
[fugafuga-application] Detect updated. Please check diff.
[fugafuga-application] compare_url: https://github.com/github_org/fugafuga-application/compare/masked_hash...develop
[fugafuga-application] Include PRs bellow. -----
[fugafuga-application] title: composer update @ 20211110012249
[fugafuga-application] link: https://github.com/github_org/fugafuga-application/pull/439

ecs Result:
total 21
no_update 3
update 18
watch_file_changed 1
Finished: SUCCESS

デプロイ前に上記を実行することで、自分たちのチーム以外がマージしているような内容を確認することもできトラブルの抑止につながっているかと思います。

まとめ

今回はデプロイチェックの仕組みについてご紹介しました。もっとよりよいやり方はあるはずなので、そもそものデプロイフローも含めて改善していきたいと思います。