私のチームは現在、次のような非常に単純な分岐/展開プロセスを使用しています。
┌────────┐ ┌────┐ ┌──────┐
Environments: │ DEV │ │ QA │ │ PROD │
└────────┘ └────┘ └──────┘
▲ ▲ ▲
│ │ │
┌────────┐ ┌────┐ ┌──────┐
Builds: │ DEV │ │ QA │ │ PROD │
└────────┘ └────┘ └──────┘
▲ ▲ ▲
│ │ │
┌────────┐ ┌────┐ ┌──────┐
Branches: │ master │ │ qa │ │ prod │
└────────┘ └────┘ └──────┘
各環境には独自のブランチ(gitを使用)と、そのブランチを使用する独自のビルドがあります。ある環境から別の環境、たとえばDEVからQAに昇格させる場合、新しいQAビルドにmaster
ブランチをマージしqa
てキックオフします(QA環境に自動的に展開されます)。
私たちは、それぞれの環境に専用のブランチとビルドを持たない新しいプロセスへの移行を検討しています。代わりに、単一のリリースビルドで「展開パッケージ」を作成し、それを任意の環境に展開できます。典型的なワークフローは次のようになります。
┌────────┐ ┌────┐ ┌──────┐
Environments: │ DEV │ ──► │ QA │ ──► │ PROD │
└────────┘ └────┘ └──────┘
▲
\
┌───────────────┐
Builds: │ release build │
└───────────────┘
▲
│
┌────────┐ ┌─────────┐
Branches: │ master │ │ release │
└────────┘ └─────────┘
ある環境から別の環境への昇格は、ソース管理で処理されなくなります。むしろ、すでに構築されているバイナリ(「展開パッケージ」)を取得し、それを新しい環境にドロップします。
この新しいシステムにより、ビルドを環境に展開できるようになり、いくつかの利点があります。たとえば、DEVとQAでPRODのバグ修正をテストするのは簡単です。現在のシステムでは、ブランチをロールバックせずにこれを行う簡単な方法を提供していません。これは明らかに避けたいものです。
この新しいシステムの最大の欠点は、どのコードがどの環境にあるかを自動的に追跡する方法がなくなったことです。PRODで修正を行う必要がある場合、現在の運用コードベースと同期する専用ブランチはありません。同じことがQA master
にも当てはまります。進行中の作業をdrせずにQAに迅速な変更をプッシュしたい場合、QA環境の現在の状態を反映するブランチはもうありません。
各環境にどのようなコードがあるのかを追跡するにはどうすればよいですか?
検討中のオプション:
- gitタグを使用して、どのコミットがどの環境にあるかを追跡します
- ビルドで使用されるgitコミットを各展開パッケージに埋め込む