« ^ »

Web系のシステムのリリース管理について考える

所要時間: 約 2分

独立したデプロイが可能だからと言って、同時平行でリリースして良い訳ではない。どのような依存性があるのかを完全に把握することはとても難しいし、人は間違えるため、完全に安全という状況を作ることはできないと考えたほうがよい。ではどうするかというと、独立したデプロイ可能性を担保しつつも、リリースの管理は中央集権的に行うということだ。リリースには順序、タイミング、依存性が常に存在する。それを調整する機関を分散させることはできない。もし分散させた場合、それは適切な調整が行われないことを意味する。

リリースの調整機関は、リリースができる状態かを確認する、リリースする、問題があれば問題に対処するというアクションを行う。問題の対処には、臨機応変さが求められるが、通常は以前の状態に戻すという対処を行う。コードの修正など、プログラムの挙動を変更するような修正を直接行うことはしない。

受け入れテストには、問題が発生した場合に元に戻せるかという点もチェックするポイントとなる。一方で機能性やパフォーマンスのテストは、ここではほとんど実施せず、リグレッションテストが行われるのみとなる。


HOTFIX
+----------------------------------------------------------------------------------------------------------------+
|                                                                                                                |
|                            +----------+             +----------+                 +----------+                  |
|                            |          |             |          |                 |          |                  |
|                            | Hotfix3  |             | Hotfix2  |                 | Hotfix1  |                  |
|                            |          |             |          |                 |          |                  |
|                            +----+-----+             +---+------+                 +----+-----+                  |
|                                 |                       |                             |                        |
+---------------------------------|-----------------------|-----------------------------|------------------------+
                                  |                       |                             | どのフェーズからでも
                                  |                       |                             | 割り込みを可能にする
                                  |                       |                             |
待ち行列                          |                       |   受け入れテスト            |     現在実行中のリリース
+---------------------------------|------------------+    |   +-----------------+       |     +-----------------+
|                                 |                  |    |   | Current release |       |     | Current release |
| +----------+      +----------+  |   +----------+   |    |   |  +----------+   |       |     |  +----------+   |
| |          |      |          |  v   |          |   |    v   |  |          |   |       v     |  |          |   |
| | Release4 |----->| Release3 |----->| Release2 |-------------->| Release1 |   |--------------->| Release0 |   |
| |          |      |          |      |          |   |    ^   |  |          |   |             |  |          |   |
| +----+-----+      +----------+      +----------+   |    |   |  +----------+   |             |  +----------+   |
|      |                                             |    |   |                 |             |                 |
+------|---------------------------------------------+    |   +-----------------+             +-----------------+
       |                                                  |                                           |
       +--------------------------------------------------+                                           |
        追い越しを可能にする                                                                          |
                                                                                                      |
リリース完了                                                                                          |
+----------------------------------------------------+                                                |
|                                                    |                                                |
| +----------+                                       |                                                |
| |          |                                       |                                                |
| | Release-1|                                       |<-----------------------------------------------+
| |          |                                       |
| +----------+                                       | リリースが完了したものも記録として残るようにする
|                                                    |
+----------------------------------------------------+