実験的な機能:段階的リリース

by cmoullec on 27 August 2020

「実戦で変更されない計画はない。」これはプロイセンの陸軍元帥ヘルムート・フォン・モルトケが残したとされる有名な言葉です。この言葉はソフトウェア開発にも当てはまります。「実用で変更されないコードはない」

ミッションクリティカルな環境で運用中のアプリケーションやサービスの安定性を最大限に確保するには、段階的にソフトウェアを展開し、更新を制御することが必須です。これにより開発者はツールの新しいバージョンの普及状況を監視および観察できるのに加え、運用チームはコンプライアンスとセキュリティの目標を満たすことができます。最近まで、Snapの自動更新のタイミングは主にクライアント側の更新スケジュールにより決定されてきました。このたび、Snap開発者が新しいリビジョンの展開を微調整するための新しい実験的機能が登場しました。それが段階的リリースです。

分割による成功:段階的なリリース実装

段階的リリースの根本的なコンセプトは、特定のSnapのユーザーに少しずつ更新を配布することです。開発者は、そのバージョンが期待したように動作することを確認してから、徐々に更新を配布する人を増やすことができます。これは特に、多数のインストールベースを持つSnapのリリースを事前にテストするとき非常に有効です。

これは現在のところ実験的な機能で、一部の機能は変更される可能性があります。段階的リリースを使用するには、関連する環境変数が有効な状態でSnapcraftを実行する必要があります。

SNAPCRAFT_EXPERIMENTAL_PROGRESSIVE_RELEASES=y snapcraft ...

オプションが有効になったら、Snapのリビジョンをリリースできます。

snapcraft release <snap-name> <revision> <channel,channel,...> --progressive <percentage>

例を示します。

snapcraft release candycane 13 --stable --progressive 30

このコマンドは、「candycane」Snapのリビジョン5をデフォルト(最新)トラックの安定したチャネルに、30%の展開に設定してリリースします。新しいリリースの対象となるデバイスは、デバイスIDのハッシュなどに基づき、疑似ランダムに選択されます。

段階的リリースの背景となる概念や情報のいくつかは、最初は少しわかりにくいかもしれません。具体的な例を見てみましょう。

$ snapcraft status candycane

Track     Arch    Channel    Version    Revision    Progress
latest    all     stable     0.6        8           73 → 70%
                            0.7        13         21 → 30%
                candidate  ↑          ↑          -
                  beta       -          -           -
                  edge       -          -           -

このデータの意味

「安定した」チャネルの段階的リリースは、ストアに報告するクライアントシステムの30%を目標として設定されます。「安定した」チャネルに表示される2つ目の数字は21で、リビジョン13をすでに提供されているクライアントシステムの実際の割合を示しています。この2つ目の値は、まだ進行中の開発作業によって決まりますが、今すぐこの実験的機能を使うとすれば次のように表示されます。

$ snapcraft status candycane

Track     Arch    Channel    Version    Revision    Progress
latest    all     stable     0.6        8           70%
                            0.7        13          30%
                candidate  ↑          ↑          -
                  beta       -          -           -
                  edge       -          -           -

この値は現在、段階的リビジョンに更新することが(開発者の)目標であるクライアントシステムの割合を示しています。たとえば、段階的リリースを25%に設定すると、クライアントの約4台のうち1台が、次に更新を要求したときにアップデートを受けることになります。標準的な更新サイクルは6時間なので、設定された目標である25%に達するには6時間またはそれ以上が必要です。

リリースの中断とリビジョンのバグ修正

段階的リリースが非常に有用である別のシナリオを紹介しましょう。少数のクライアントシステムにリビジョンを提供することで、開発者は問題がある、またはバグ修正が必要な可能性のあるリリースもより的確にコントロールできます。

たとえば、リビジョン13(r13)をチャネルユーザーの20%にリリースした後で、ユーザーからのフィードバックまたは他の方法で、問題があることが見つかったとします。この場合、そのリビジョンの以後の展開を停止し、問題点を修正してから、新しいリビジョン(r14)をチャネルユーザーの20%にリリースします。この場合には、リビジョンr13を受け取った20%のクライアントシステムは、r14も最初に受け取ることになります。これにより開発者は、バグ修正が有効であることを検証してから、対象ベースの100%に達するまで段階的にロールアウトを続けることができます。

まとめ

段階的リリースは、ソフトウェアのバージョンを制御された段階的な方法でロールアウトする便利で柔軟な方法です。これによって開発者は、特に高リスクの環境において、新しいリリースの利用によって問題が生じることがないかどうか、慎重に監視できます。このブログでプレビューした機能は、まもなくSnapcraft 4.0でロールアウトされる予定です。段階的リリースに関する質問やご意見(または他の話題でも)は、当社フォーラムでお聞かせください。

写真提供:Andrew RuizUnsplashより


© 2020 Canonical Ltd. Ubuntu および Canonical は、Canonical Ltd の登録商標です。