ビルド速度を向上させるための推奨事項
Azure Well-Architected フレームワークのオペレーショナル エクセレンスに関するチェックリストの次の推奨事項を対象とします。
OE:04 | 業界で認められている開発とテストのプラクティスに従って、ソフトウェア開発と品質保証のプロセスを最適化します。 役割を明確に指定するため、ツール、ソース管理、アプリケーションの設計パターン、ドキュメント、スタイル ガイドなどのコンポーネント全体でプラクティスを標準化します。 |
---|
関連ガイド: ツールとプロセスを標準化するための推奨事項 | 継続的インテグレーションを使用するための推奨事項
このガイドでは、デプロイ インフラストラクチャのパフォーマンスを向上させるための推奨事項について説明します。 製品開発の初日にビルド プロセスを立ち上げて実行することが重要です。 ビルドは継続的デリバリー システムの中心的な要素です。ビルドの状態は、製品がデプロイ可能なタイミングを示しているためです。 ビルドは製品の状態に関する重要な情報を提供するため、常に迅速なビルドを目指して努力する必要があります。
ビルドに時間がかかると、ビルドの問題を修正するのが難しくなります。 遅延が発生して常態化すると、チームは問題を解決する意欲が低下する傾向があります。
主要な設計戦略
ビルド時間を最適化する
より高速なビルドを実行するには、次のことができます。
パフォーマンス要件を満たすエージェントを選択する: 適切なビルド マシンを選択してビルドを高速にします。 高速マシンでは、時間と分の間で違いが出る可能性があります。 パイプラインが Azure Pipelines にある場合は、Microsoft ホステッド エージェントを使用してジョブを実行できます。 Microsoft ホステッド エージェントを使用する場合、メンテナンスとアップグレードが自動的に行われます。 詳細については、Microsoft ホステッド エージェントに関するページを参照してください。
ビルド サーバーの場所を最適化する: コードをビルドするとき、データはネットワーク経由で送信されます。 ビルドへの入力は、ソース管理リポジトリと成果物リポジトリからフェッチされます。 コンパイルされた成果物、テスト レポート、コード カバレッジの結果、デバッグ シンボルを含め、ビルド プロセスからの出力をコピーする必要があります。 これらのコピー アクションは迅速に実行することが重要です。 独自のビルド サーバーを使用する場合は、必ずビルド サーバーをソースとターゲットの場所の近くに配置します。 アップロードとダウンロードが高速になると、全体のビルド時間を短縮できます。
ビルド サーバーをスケールアウトする: 小規模な製品の場合は、1 つのビルド サーバーで十分な場合があります。 製品の規模とスコープ、製品に取り組むチーム数が増えると、単一サーバーでは不十分になる可能性があります。 上限に達したら、複数のコンピューターにわたってインフラストラクチャを水平スケーリングします。 詳細については、「エージェント プールの作成と管理」を参照してください。
ビルドを最適化する:
並列ジョブを追加して、ビルド プロセスを高速にします。 詳しくは、「並列ジョブを構成して支払う」をご覧ください。
テスト スイートの並列実行を有効にすると、多くの場合、特に統合と UI のテストを実行する場合に、時間を大幅に短縮できます。 詳細については、「テスト ランナーに対して並列でテストを実行する」を参照してください。
乗数の概念を使用します。この場合、複数のビルド エージェントでビルドをスケールアウトできます。 詳細については、「パイプラインでのジョブの指定」を参照してください。
統合、UI、スモークの各テストをリリース パイプラインに移行することを検討してください。 リリース パイプラインに移行すると、ビルド速度とビルド フィードバック ループの速度が向上します。
ビルド成果物を NuGet や Maven などのパッケージ管理ソリューションに発行します。 パッケージ管理ソリューションに発行すると、ビルド成果物をより簡単に再利用できるようになります。
人間の介入を最小限に抑える
組織では、ビルド時間を最適化するために、何種類かのビルドを作成することを選択する場合があります。 考えられるビルドは次のとおりです。
継続的インテグレーション (CI) ビルド: このビルドの目的は、確実にコードをコンパイルし、単体テストを実行することです。 このビルドは、コミットのたびにトリガーされます。 プロジェクトの心臓部として機能し、チームに品質のフィードバックをすぐに提供します。 詳細については、「パイプラインをトリガーするイベントの指定」を参照してください。
夜間ビルド: 夜間ビルドの目的は、コードをコンパイルすることだけではなく、非効率で大規模なテスト スイートを、各ビルドの定期的なサイクルで確実に実行することです。 通常、このようなテストには統合、UI、またはスモーク テストが含まれます。 詳細については、「パイプラインのスケジュールを構成する」を参照してください。
リリース ビルド: テストのコンパイルと実行のほかに、このビルドを実行すると、API ドキュメント、準拠レポート、コード署名、およびコードがビルドされるたびに必要ではないその他の手順もコンパイルされます。 このビルドでは、最終的に運用環境にデプロイするために、リリース パイプラインにプッシュされるゴールデン コピーが提供されます。
組織に必要なビルドの種類は、チームと組織の成熟度、取り組んでいる製品の種類、デプロイ戦略などの要因によって異なります。
Azure ファシリテーション
Azure DevOps は共同作業に適した、効率的で一貫性のある開発プラクティスを構築するのに役立つサービスのコレクションです。
Azure Pipelines を使用して、アプリケーションの継続的インテグレーションと継続的デリバリー (CI/CD) をサポートするサービスを構築およびリリースします。
GitHub Actions for Azure を使用して CI/CD プロセスを自動化し、Azure と直接統合することでデプロイを簡略化します。 また、GitHub Actions for Azure を使用して、リポジトリに対するすべての pull request をビルドしてテストしたり、マージされた pull request を運用環境にデプロイしたりするワークフローを作成できます。
Microsoft ホステッド エージェントは、Azure Pipelines でネイティブに使用できます。 これらのエージェントは、1 つのジョブにのみ使用され、その後に破棄される使い捨ての仮想マシンであり、ビルドの管理が簡単なオプションとして利用できます。
関連リンク
- Azure DevOps
- Azure Pipelines
- 並列ジョブの構成と支払い
- パイプラインのスケジュールを構成する
- エージェント プールの作成と管理
- GitHub for Actions for Azure
- Microsoft によってホストされるエージェント
- テスト ランナーに対して並列でテストを実行する
- パイプラインをトリガーするイベントの指定
- パイプラインにジョブを指定する
オペレーショナル エクセレンス チェックリスト
レコメンデーションの完全なセットを参照してください。