Azure DevOps サービス |Azure DevOps Server |Azure DevOps Server 2022
保持ポリシーは、パイプラインの実行時間、クラシック リリース、テスト データをAzure DevOpsに保持する期間を制御します。 これらの設定は、古いデータを削除するタイミングと、保持する期間を長くする必要があるデータを定義することで、ストレージの使用状況、コンプライアンス、および追跡可能性のバランスを取るのに役立ちます。 この記事では、使用できる保持オプションと、それらがパイプライン、リリース、テストにどのように適用されるかについて説明します。
前提条件
| Product | Requirements |
|---|---|
| Azure DevOps | - Azure DevOps組織。 - Azure DevOps プロジェクト。 |
| アクセス許可 | - 既定では、共同作成者、ビルド管理者、Project管理者、または Release Admins グループのメンバーである場合は、アイテム保持ポリシーを管理できます。 - アイテム保持ポリシーを管理するには、 Enterprise、 Test Professional、または MSDN Platforms のいずれかのサブスクリプションが必要です。 - 毎月のAzure Test Plans アクセスを購入し、Basic + Test Plans アクセス レベルを割り当てることもできます。 詳細については、「 ユーザー ロール別のアクセスのテスト」を参照してください。 |
重要
Azure Pipelinesでは、パイプラインごとの保持ポリシーはサポートされなくなりました。 プロジェクト レベルの保持ルールを使用することをお勧めします。
保持ポリシーを構成する
プロジェクトで保持設定ページを開き、管理するポリシー領域を選択するには、次の手順に従います。
Azure DevOps プロジェクトにサインインします。
[
>Project settings を選択します。次のいずれかのオプションを選択してください。
- [ パイプライン] で、[ 設定] を選択して、実行、成果物、シンボル、添付ファイル、プル要求の実行のリテンション期間を構成します。
- [ パイプライン] で[ リリースリテンション期間 ] を選択して、リリースが削除または完全に破棄されるタイミングなど、リリースリテンション期間の設定を構成します。
- [ テスト] で [ 保持] を選択して、手動および自動のテスト実行を保持する期間を構成します。
パイプライン実行の保持ポリシー
ほとんどの場合、完了した実行を無期限に維持する必要はありません。 実行アイテム保持ポリシーを使用すると、実行時間と関連データを削除前に保持する期間を定義できます。
警告
Azure DevOpsでは、パイプラインごとの保持ルールはサポートされなくなりました。 YAML とクラシック パイプラインのアイテム保持ポリシーを構成する唯一の方法は、前に説明したプロジェクト設定を使用することです。 パイプラインごとのアイテム保持ポリシーを構成することはできなくなりました。
パイプライン設定ごとに保持する最近の実行の数は、リポジトリの種類に基づいて異なる方法で解釈されます。
Azure Repos: Azure Pipelinesは、pipeline の既定のブランチおよびリポジトリ内の保護された各ブランチに対して構成された最新の実行の数を保持します。 保護されたブランチは、ブランチ ポリシーが構成されている任意のブランチです。
たとえば、
mainとreleaseの 2 つのブランチを持つリポジトリについて考えてみましょう。 パイプラインの既定のブランチがmainされ、releaseにブランチ ポリシーがある場合、releaseは保護されたブランチとして扱われます。 リテンション期間を設定して 3 回の実行を保持する場合、Azure Pipelines はmainの最新の 3 回の実行、releaseの最新の 3 回の実行、およびパイプライン全体のブランチに関係なく最新の 3 回の実行を保持します。次の例では、最新の実行が最初に一覧表示されることを前提としています。 最新の 3 回の実行を保持するようにリテンション期間を構成するときに保持される実行が表示されます (日ベースの設定は無視されます)。
実行番号 [Branch]\(ブランチ) 保持/未保持 なぜですか? 実行 10 メイン 保持されています メイン用の最新3つとパイプライン用の最新3つ 実行 9 branch1 保持されています パイプラインの最新 3 件 実行 8 branch2 保持されています パイプラインの最新 3 件 実行 7 メイン 保持されています メインの最新 3 件 第6回実行 メイン 保持されています メインの最新 3 件 実行 5 メイン 保持されない メインまたはパイプライン用の最新の 3 つではありません 第4回実行 メイン 保持されない メインまたはパイプライン用の最新の 3 つではありません ラン 3 branch1 保持されない メインまたはパイプライン用の最新の 3 つではありません 実行 2 リリース 保持されています リリースの最新の 3 つ 実行 1 メイン 保持されない メインまたはパイプライン用の最新の 3 つではありません 保持する日数は、実行が完了した日付から計算されます。 たとえば、1 月 19 日のメイン ブランチには 2 つの実行があります。 後で完了した実行は保持されます。
その他すべての Git リポジトリ: Azure Pipelinesパイプライン全体に対して構成された最新の実行数が保持されます。
Team Foundation Version Control (TFVC): Azure Pipelinesは、ブランチに関係なく、パイプライン全体に対して構成された最新の実行数を保持します。
実行のうち削除される部分
実行が削除されると、次のデータが削除されます。
- ログ
- すべてのパイプラインとビルド成果物
- すべてのシンボル
- バイナリ
- 実験値
- 実行のメタデータ
- ソース ラベル (TFVC) またはタグ (Git)
パイプライン実行の保持期間では、ユニバーサルパッケージ、NuGet、npm、その他のパッケージは制御されません。
実行が削除されるタイミング
次の条件がすべて満たされている場合、実行は削除されます。
- 保持設定で構成されている日数を超えています。
- 保持設定で構成されている最近の実行の 1 つではありません。
- 無期限保持のマークは付けられません。
- リリースでは保持されません。
保持ポリシーは、1日に1回処理されます。 処理時間は、負荷分散のために 1 日を通して作業が分散されるために異なります。 このスケジュールは変更できません。
パイプライン実行時に保持期間リースを自動設定する
保持リースを使用すると、構成された保持期間を超えてパイプライン実行の有効期間を延長または制御できます。
リース API を使用して、パイプライン実行のリースを追加または削除できます。
とrunIdのスクリプトとdefinitionIdを使用して、パイプライン内からこの API を呼び出すことができます。
特定の期間のリースを設定できます。 たとえば、テスト環境にデプロイされた実行を短期間保持することができます。 本番環境にデプロイされた実行を、より長い期間保持することができます。
パイプライン実行時に保持期間リースを手動設定する
パイプライン実行の詳細ページの [ その他のアクション] メニュー から、 パイプラインの実行 を手動で保持できます。
実行を削除する
[パイプラインの実行の詳細] ページの [その他のアクション] メニューから実行を削除できます。
注意
現在実行に適用されている保持ポリシーがある場合は、実行を削除する前に削除する必要があります。 手順については、「 パイプラインの実行の詳細: 実行を削除する」を参照してください。
保持ポリシーを解除する
クラシック リリース パイプラインのリリースリテンション 期間ポリシーは、リリースとそれに関連付けられている実行を保持する期間を決定します。 これらのポリシーでは、次の両方を構成できます。
- 最後に変更またはデプロイされた後に各リリースを保持する日数。
- 各パイプラインに保持するリリースの最小数。
リテンション タイマーは、リリースが変更またはステージにデプロイされるたびにリセットされます。 最小リリース設定は、日数ベースの設定よりも優先されます。 たとえば、最小 3 つのリリースを設定した場合、構成された日数に関係なく、最新の 3 つのリリースが保持されます。 これらのリリースは、不要になった場合でも手動で削除できます。 詳細については、この記事で後述する FAQ を参照してください。
YAML とビルド パイプラインでは、同じ実行保持ポリシーが使用されます。 これらの設定は、Project settings>Pipelines>Settings で表示できます。
グローバル リリース保持ポリシー
Azure DevOps サービスでは、これらの設定を表示できますが、プロジェクト レベルで変更することはできません。
グローバル リリースのリテンション期間の設定は、projectの Release retention ページから Project 設定で確認できます。
- 最大保持ポリシー: すべてのリリース パイプラインでリリースを保持できる期間の上限を定義します。 パイプライン作成者は、この制限を超えてリテンション期間を構成することはできません。
- 既定の保持ポリシー: リリース パイプラインに適用される既定の保持値を定義します。 パイプライン作成者は、これらの既定値をオーバーライドできます。
- リリースの永久破棄: 削除されたリリースを完全に削除するまでの期間を制御します。 個々のリリース パイプラインでは、このポリシーをオーバーライドできません。
グローバル リリース保持ポリシー
オンプレミスAzure DevOps Server使用する場合は、プロジェクト レベルの既定値とリリースリテンション期間の最大値を構成できます。 また、削除されたリリースが完全に破棄されるタイミングを設定することもできます。 (ビルド エクスプローラーの [ 削除済み ] タブから削除されます)。
- 最大保持ポリシー: すべてのリリース パイプラインでリリースを保持できる期間の上限を定義します。 パイプライン作成者は、この制限を超えてリテンション期間を構成することはできません。
- 既定の保持ポリシー: リリース パイプラインに適用される既定の保持値を定義します。 パイプライン作成者は、これらの既定値をオーバーライドできます。
- リリースの永久破棄: 削除されたリリースを完全に削除するまでの期間を制御します。 個々のリリース パイプラインでは、このポリシーをオーバーライドできません。
コレクションレベルのアイテム保持ポリシーを設定する
オンプレミス サーバーを使用する場合は、カスタム 規則を使用してコレクション レベルの保持を構成することもできます。 これらの設定は、クラシック ビルド パイプラインに適用され、コレクションの既定のリテンション値と最大リテンション値を定義します。
[ファイルのコピー] タスクを使用してデータを長く保存する
ビルド出力を構成された保持期間よりも長く保持する必要がある場合は、[ファイルのコピー] タスクを使用して独自の保存場所に コピーします。
ビルド成果物として発行されたデータは保持クリーンアップの対象であるため、ビルド成果物の発行の代わりにファイルのコピーを使用します。
FAQ
実行またはリリースが無期限で保持されるようにマークした場合でも、保持ポリシーは適用されますか?
いいえ。 個々の実行またはリリースを無期限に保持するようにマークした場合、パイプラインの保持ポリシーと管理者によって設定された上限は適用されません。 保持を無期限に停止するまで、保持され続けます。
運用環境にデプロイされた実行を長く保持するように指定するにはどうすればよいですか?
クラシック リリースを使用して運用環境にデプロイする場合は、リリース パイプラインでリテンション期間をカスタマイズします。 運用環境にデプロイされたリリースを保持する日数を設定し、それらのリリースに関連付けられている実行を保持するように指定します。 この設定は、実行保持ポリシーを上書きします。
マルチステージ YAML パイプラインを使用する場合は、プロジェクト設定でのみリテンション期間を構成できます。 デプロイ環境別にリテンション期間を構成することはできません。
実行を無期限に保持するようにマークしませんでしたが、多くの実行が保持されています。 この動作を回避する方法はありますか。
この動作は、次のいずれかの理由で発生する可能性があります。
- プロジェクト内の誰かが、実行を無制限の保持としてマークしました。
- リリースが実行を消費し、そのリリースによりこれらの実行で保持のロックが適用されます。 以前説明したように、リリース保持ポリシーをカスタマイズします。
実行が不要になった場合、または実行を保持していたリリースが既に削除されている場合は、実行を手動で削除できます。
最小リリースを保持するために、この設定はどのように機能しますか?
値 を保持する最小リリース はステージ レベルで定義されます。 Azure DevOpsは、保持期間外であっても、ステージに最後にデプロイされたリリースの数を常に保持します。 リリースは、そのステージへのデプロイが開始されたときにのみ、この最小値にカウントされます。 成功したデプロイと失敗したデプロイの両方がカウントされます。 承認待ちのリリースはカウントされません。
保持期間が異なる複数のステージにリリースを展開する場合、リテンション期間はどのように決まりますか?
最終的なリテンション期間は、リリースが展開されるすべてのステージで設定 を保持する日数 によって決定されます。これらのステージの最大値を使用します。 保持する最小リリース はステージ固有であり、リリースが 1 つまたは複数のステージにデプロイされたかどうかに基づいて変更されることはありません。 関連付けられた成果物の保持は、 そのオプションが有効になっているステージにリリースがデプロイされている場合にのみ適用されます。
古いリリースがあるステージを削除しました。 この場合、どのようなリテンション期間が考慮されますか?
ステージが削除されると、そのステージ レベルの保持設定は適用されなくなります。 その場合、Azure DevOpsはプロジェクト レベルの既定の保持設定を使用します。
私の組織からは、設定で許可されているよりも長くビルドとリリースを保持するように求められています。 より長く保持するよう要求するにはどうすればよいですか?
実行またはリリースを、構成された保持制限よりも長く保持するには、無期限に保持するようにマークします。 保持期間を長く手動で構成する設定はありません。 サポートについては、Azure DevOps サポートにお問い合わせください。
REST API を使用して実行情報と成果物をダウンロードし、独自のストレージ アカウントまたはアーティファクト リポジトリに格納することもできます。
私はいくつかの実行を失いました。 元に戻す方法はありますか?
サービスのバグが原因で実行が失われたと思われる場合は、すぐにサポート チケットを作成します。 ビルド定義が 1 週間以上前に手動で削除された場合、それを回復することはできません。 保持ポリシーに従って実行が想定通りに削除された場合、それらを復元することはできません。
エージェントの Build.Cleanup 機能を使用するにはどうすればよいですか?
エージェントに Build.Cleanup 機能を設定すると、クリーンアップ ジョブはそれらのエージェントにのみルーティングされ、他のエージェントは通常のパイプライン作業に使用できます。 パイプラインの実行が削除されると、Azure DevOpsの外部に格納された成果物はエージェント ジョブを介してクリーンアップされます。 複数のクリーンアップ ジョブがプールを飽和させる場合は、エージェントのサブセットをクリーンアップ エージェントとして指定します。 エージェントが Build.Cleanup 設定されている場合は、それらのエージェントのみがクリーンアップ ジョブを実行します。 この設定を有効にするには、 Agent>Capabilities に移動し、 Build.Cleanup を 1 に設定します。
ビルドが削除されると、ファイル共有成果物はどうなりますか?
ファイル共有成果物を含むビルドが削除されると、それらのファイルをクリーンアップするために、ビルド エージェントに新しいビルド タスクがキューに入れられます。 エージェントは、次の条件に基づいてこのタスクを実行するために選択されます。
-
Build.Cleanup機能を備えたエージェントはありますか? - ビルドを実行したエージェントは使用できますか?
- 同じプールからエージェントを使用できますか?
- 同様のグループのエージェントはいますか?
- 使用できるエージェントはありますか?
リリースの一部として発行された自動テスト結果は、そのリリースが削除されるまで保持されますか?
リリース段階で公開されたテスト結果は、リリースの保持ポリシーではなく、テストの保持ポリシーに従って保存されます。 リリースに限りテスト結果を保持する必要がある場合は、Project 設定で自動テスト実行のリテンション期間を Never delete に設定します。 この設定により、リリースが削除された場合にのみテスト結果が削除されます。
手動テスト結果は削除されますか?
いいえ。 手動テスト結果は削除されません。
バージョン管理のラベルやタグを保持するにはどうすればよいですか?
ビルドが削除された後もラベルまたはタグを保持する必要がある場合は、パイプライン タスクに適用するか、パイプラインの外部に手動で追加するか、ビルドを無期限に保持します。
重要
ビルドが削除された場合でも、 ソース タスクによって自動的に作成されないビルド パイプライン中に適用されるバージョン コントロールのラベルまたはタグは保持されます。 ビルド中に ソース タスクによって自動的に作成されるラベルまたはタグは、ビルド成果物として扱われ、ビルドと共に削除されます。
他のパイプラインで使われているパイプラインはどうなりますか?
クラシック リリースでは、自動的に使用されるパイプラインは保持されます。
他のパイプラインで使われているパイプラインはどうなりますか?
クラシック リリースでは、自動的に使用されるパイプラインは保持されます。 YAML を使用している場合は、マルチステージ YAML パイプラインを作成してリリースを表し、その中の別の YAML パイプラインを リソースとして使用することもできます。 リリース パイプラインが保持されている限り、リソース パイプラインは自動的に保持されます。