https://jawsug-arch.connpass.com/event/133504/
https://twitter.com/int128/status/1138405093949169665
ブランチ戦略、ブランチと環境を対応させるのか?
ブランチと環境が1:1なのか、1:Nなのか?
今のプロジェクト
- ブランチと環境を対応させて、Git駆動で環境反映させたい
🤔🤔🤔うまく運用回る???
以前のプロジェクトのフロー
アーティファクト作成とデプロイは分離。
- GitLab -> Jenkins -> AWS CodeBuild上でCI(build/test/package) -> S3
- S3 -> Ansible -> EC2(検証、商用)
- Ansible -> AWS CLI -> EC2 -> S3 / CloudFront
CI/CDでどこまで自動化するのか?
- ビルド、テストだけ
- パッケージまで
- インフラ構築、デプロイまで
Artifactをどう持つかにもよりそう?
- S3にrpmとかjarとかをtar.gz等で保存、EC2が上がったらAnsibleでまきに行く
- ECRにコンテナで持つ
環境が何面あるかにもよる?
- 開発
- 検証
- ステージング
- 商用
アプリの実行環境にも依存しそう
- VM
- EC2、ElasticBeansTalk
- コンテナ、ビルドパック
- ECS/Fargate
- PCF
- OpenShift/Kubernetes
環境差分をどう持つのか?
- リリース資材に含めちゃう
- 別管理して環境変数としてリリース時に注入
- DB
- SSMパラメータストア
- Spring Cloud Config的なものでgitで管理
- Kubernetes Configmap
ブランチマージで自動で環境反映させると初期開発で燃えたり試験フェーズで1日に何回もマージが入るとき、自分の反映の待ちが発生するのでは?
ある程度変更をまとめて○時までにマージされたのを△時いリリースします的な運用(前のプロジェクトはこれ)
環境作ってからE2Eテストが走るとかあったときにdevelop / stagingとかの環境はどうなる?
チームの人数にも依存しそう。
Ops・インフラチームがリリースするのか、開発チームが全部やるのか、会社が分かれるのか否か
- データモデルの話では?
- デプロイ資材をデータと捉えて、各フェーズに対してFunctionの入出力を考えると整理できそう。
- 何を固定制約において、何を変動要素にするか?自由度が高いものを固定して考えるとよさそう。
環境とブランチが一致しているとインフラ管理がらくちん。