ビルド速度を向上させるための推奨事項

この Azure Well-Architected Framework のオペレーショナル エクセレンス チェックリストの推奨事項に適用されます。

OE:04 開発とテストに関する業界で実証済みのプラクティスに従って、ソフトウェア開発と品質保証プロセスを最適化します。 明確なロールの指定については、ツール、ソース管理、アプリケーション設計パターン、ドキュメント、スタイル ガイドなどのコンポーネント間でプラクティスを標準化します。

関連ガイド: ツールとプロセス | を標準化するための推奨事項 継続的インテグレーションを使用するための推奨事項

このガイドでは、デプロイ インフラストラクチャのパフォーマンスを向上するための推奨事項について説明します。 製品開発の最初の日にビルド プロセスを立ち上げて実行することが重要です。 ビルドは継続的デリバリー システムのハートビートです。これは、製品がデプロイ可能な場合にビルドの状態が表示されるためです。 ビルドは製品の状態に関する重要な情報を提供するため、常に高速ビルドに努める必要があります。

ビルドに時間がかかる場合は、ビルドの問題を解決することは困難です。 遅延が発生して正規化されると、チームは問題を解決する意欲が低下する傾向があります。

主要な設計戦略

ビルド時間

より高速なビルドを実行するには、次の操作を行います。

  • パフォーマンス要件を満たすエージェントを選択する: 適切なビルド マシンを選択してビルドを高速化します。 高速マシンでは、時間と分の間で違いが出る可能性があります。 パイプラインが Azure Pipelines にある場合は、Microsoft ホスト型エージェントを使用してジョブを実行できます。 Microsoft でホストされているエージェントを使用すると、メンテナンスとアップグレードが処理されます。 詳細については、Microsoft ホステッド エージェントに関するページを参照してください。

  • ビルド サーバーの場所を最適化する: コードをビルドすると、データがネットワーク経由で送信されます。 ビルドへの入力は、ソース管理リポジトリと成果物リポジトリからフェッチされます。 コンパイルされた成果物、テスト レポート、コード カバレッジの結果、デバッグ シンボルなど、ビルド プロセスからの出力をコピーする必要があります。 これらのコピー アクションを迅速に実行することが重要です。 独自のビルド サーバーを使用する場合は、ビルド サーバーがソースとターゲットの場所の近くに配置されていることを確認します。 高速アップロードとダウンロードにより、全体的なビルド時間を短縮できます。

  • ビルド サーバーのスケールアウト: 小規模な製品には、1 つのビルド サーバーで十分な場合があります。 製品のサイズと範囲、および製品に取り組むチームの数が増えるにつれて、1 台のサーバーでは十分ではない可能性があります。 上限に達したら、複数のコンピューターにわたってインフラストラクチャを水平スケーリングします。 詳細については、「 エージェント プールの作成と管理」を参照してください。

  • ビルドを最適化します

    • 並列ジョブを追加して、ビルド プロセスを高速化します。 詳しくは、「並列ジョブを構成して支払う」をご覧ください。

    • 並列テスト スイートの実行を有効にします。これは、多くの場合、統合テストと UI テストを実行する場合に、多くの場合、大量の時間を節約します。 詳細については、「 テスト ランナーに対してテストを並列で実行する」を参照してください。

    • 乗数の概念を使用します。この場合、複数のビルド エージェントでビルドをスケールアウトできます。 詳細については、「パイプラインでのジョブの指定」を参照してください。

    • 統合、UI、スモーク テストをリリース パイプラインに移動することを検討してください。 リリース パイプラインに移動すると、ビルド速度とビルド フィードバック ループの速度が向上します。

    • NuGet や Maven などのパッケージ管理ソリューションにビルド成果物を発行します。 パッケージ管理ソリューションに発行すると、ビルド成果物をより簡単に再利用できます。

ユーザーの介入

organizationでは、ビルド時間を最適化するために、いくつかの異なる種類のビルドを作成することを選択できます。 次のようなビルドが考えられます。

  • 継続的インテグレーション (CI) ビルド: このビルドの目的は、コードがコンパイルされ、単体テストが実行されるようにすることです。 このビルドは、各コミットでトリガーされます。 プロジェクトのハートビートとして機能し、チームに質の高いフィードバックをすぐに提供します。 詳細については、「パイプラインを トリガーするイベントを指定する」を参照してください。

  • 夜間ビルド: 夜間ビルドの目的は、コードをコンパイルするだけでなく、ビルドごとに通常の頻度で非効率的に実行される大規模なテスト スイートを保証することです。 通常、これらのテストには統合、UI、またはスモーク テストが含まれます。 詳細については、「パイプラインのスケジュールを構成する」を参照してください。

  • リリース ビルド: このビルドでは、テストのコンパイルと実行に加えて、コードがビルドされるたびに必要ない API ドキュメント、コンプライアンス レポート、コード署名、その他の手順もコンパイルされます。 このビルドでは、最終的に運用環境にデプロイするためにリリース パイプラインにプッシュされるゴールデン コピーが提供されます。

organizationに必要なビルドの種類は、チームとorganizationの成熟度、作業している製品の種類、デプロイ戦略などの要因によって異なります。

Azure ファシリテーション

Azure DevOps は、コラボレーション、効率的、および一貫性のある開発プラクティスを構築するのに役立つサービスのコレクションです。

Azure Pipelines を使用して、アプリケーションの継続的インテグレーションと継続的デリバリー (CI/CD) をサポートするサービスを構築およびリリースします。

Azure GitHub Actionsを使用して CI/CD プロセスを自動化し、Azure と直接統合してデプロイを簡略化します。 リポジトリに対するすべての pull request をビルドしてテストするワークフローを作成したり、マージされたプル要求を運用環境にデプロイしたりすることもできます。そのためには、azure 用のGitHub Actionsを使用します。

Microsoft でホストされるエージェント は、 Azure Pipelines でネイティブに使用できます。 これらのエージェントは、1 つのジョブにのみ使用され、破棄される単一使用の仮想マシンです。これにより、ビルドの管理が簡単なオプションが提供されます。

オペレーショナル エクセレンス チェックリスト

推奨事項の完全なセットを参照してください。