設定組建、發行和測試的保留原則

Azure DevOps Services | Azure DevOps Server 2022 - Azure DevOps Server 2019

保留原則可讓您設定系統中所儲存的執行、版本和測試的保留時間。 若要節省儲存空間,您想要刪除較舊的執行、測試和版本。

下列保留原則可在您的 Project 設定的 Azure DevOps 中使用:

  1. 管線 - 設定保留成品、符號、附件、執行和提取要求執行的時間長度。
  2. 發行 (傳統) - 設定是否要儲存組建並檢視預設和最大保留設定。
  3. 測試 - 設定保持自動化和手動測試回合、結果和附件的時間長度。

項目設定保留原則

注意

如果您使用內部部署伺服器,您也可以指定專案的保留原則預設值,以及版本永久終結時。 深入瞭解 本文稍後的發行保留 期。

必要條件

根據預設,參與者、組建管理員、專案管理員和版本管理員群組的成員都可以管理保留原則。

若要管理保留原則,您必須具有下列其中一個訂用帳戶:

您也可以購買 Azure Test Plans 的每月存取權,並指派基本 + Test Plans 存取層級。 請參閱依使用者角色來測試存取權

設定保留原則

  1. 登入您的專案。

  2. 移至齒輪圖示項目設定的 [設定] 索引標籤。

  3. 選取 [管線] 下的 [發行保留],或在 [測試] 下選取 [保留]。

    • 選取 [發行保留] 以設定發行保留 原則,並設定何時刪除或永久終結版本。
    • 選取 [保留 ] 以設定保留手動和自動化測試執行的時間長度。

    DevOps 2019 項目設定中保留設定的螢幕快照。

設定保留原則

  1. 登入您的專案。

  2. 移至齒輪圖示項目設定的 [設定] 索引標籤。

  3. 選取 [管線] 底下的 [設定] 或 [發行保留] 或 [測試] 下的 [保留]。

    • 選取 [設定],以設定執行、成品、符號、附件和提取要求執行的保留原則。
    • 選取 [發行保留] 以設定發行保留 原則,並設定何時刪除或永久終結版本。
    • 選取 [保留 ] 以設定保留手動和自動化測試執行的時間長度。

    項目設定中保留設定的螢幕快照。

重要

Azure Pipelines 不再支持個別管線保留原則。 我們建議使用專案層級保留規則。

設定執行保留原則

在大部分情況下,您不需要保留已完成的執行時間超過特定天數。 使用保留原則,您可以控制 在刪除之前,要保留每個執行的天數

  1. 移至齒輪圖示項目設定的 [設定] 索引標籤。

  2. 在 [管線] 區段中選取 [設定]。

警告

Azure DevOps 不再支援每個管線保留規則。 設定 YAML 和傳統管線保留原則的唯一方法是透過上述項目設定。 您無法再設定每個管線保留原則。

每個管線要保留的最近執行數目設定,需要多一點說明。 此設定的解譯會根據您在管線中建置的存放庫類型而有所不同。

  • Azure Repos:Azure Pipelines 會針對管線的預設分支和存放庫的每個受保護分支保留已設定的最新執行數目。 已設定任何分支原則的分支會被視為受保護的分支。

    例如,請考慮具有兩個分支 mainrelease的存放庫。 pipeline's default branch假設 是 main 分支,且release分支具有分支原則,使其成為受保護的分支。 在此情況下,如果您將原則設定為保留三個執行,則會保留最新三個執行 main 和最新三個 release 分支執行。 此外,此管線的最新三個執行也會保留(不論分支為何)。

    為了進一步釐清此邏輯,讓我們說此管線的執行清單如下,最上層執行。 下表顯示如果您已設定為保留最新的三個回合,將會保留哪些回合(忽略天數設定的效果):

    運行# 分行 保留/未保留 為什麼?
    回合 10 main 已保留 主要的最新 3 和管線的最新 3
    回合 9 branch1 已保留 管線的最新3個
    回合 8 branch2 已保留 管線的最新3個
    回合 7 main 已保留 main的最新 3 個
    回合 6 main 已保留 main的最新 3 個
    回合 5 main 未保留 主要和管線都不是最新的 3
    回合 4 main 未保留 主要和管線都不是最新的 3
    回合 3 branch1 未保留 主要和管線都不是最新的 3
    執行 2 版本 已保留 最新版本 3
    回合 1 main 未保留 主要和管線都不是最新的 3
  • 所有其他 Git 存放庫: Azure Pipelines 會保留整個管線的最新執行數目。

  • TFVC: 無論分支為何,Azure Pipelines 都會保留整個管線的最新執行數目。

執行哪些部分會被刪除

刪除執行時,會刪除下列資訊:

  • 記錄
  • 所有管線和組建成品
  • 所有符號
  • 二進位
  • 測試結果
  • 執行元數據
  • 來源標籤 (TFVC) 或標籤 (Git)

通用套件、NuGet、npm 和其他套件不會繫結至管線保留。

何時刪除

您的保留原則會每天處理一次。 原則處理變數的時間,因為我們將工作分散到一整天,以達到負載平衡的目的。 沒有選項可變更此程式。

如果下列所有條件都成立,就會刪除執行:

  • 超過保留設定中所設定的天數
  • 它不是保留設定中所設定的最近執行之一
  • 未標示為無限期保留
  • 發行不會保留此版本

在管線執行時自動設定保留租用

保留租用可用來管理超過設定保留期限的管線執行存留期。 您可以在管線執行時新增或刪除保留租用,方法是呼叫 租用 API。 您可以使用腳本在管線內叫用 此 API,並使用 runId 和 definitionId 的預先定義變數

您可以在管線執行期間新增保留租用。 例如,部署至測試環境的管線執行可以保留較短的持續時間,而部署至生產環境的執行可以保留較長的時間。

在管線執行上手動設定保留租用

您可以使用管線執行詳細數據頁面上的 [更多動作] 選單,手動設定要保留的管線執行。

手動保留執行

刪除執行

您可以使用 [管線執行詳細資料] 頁面上的 [更多動作] 選單來刪除執行。

注意

如果目前有任何保留原則套用至執行,必須先移除這些保留原則,才能刪除執行。 如需指示,請參閱 管線執行詳細數據 - 刪除執行

刪除執行

設定發行保留原則

傳統發行管線的發行保留原則會決定發行和與其鏈接的執行保留多久。 使用這些原則,您可以控制 在上次修改或部署每個版本之後保留多少天 ,以及 每個管線應保留的最小版本 數目。

每次修改或部署至階段時,都會重設發行上的保留定時器。 保留設定的最低版本數目會優先於天數。 例如,如果您指定保留至少三個版本,則不論指定的天數為何,最新的三個版本都會無限期保留。 不過,當您不再需要這些版本時,您可以手動刪除這些版本。 如需發行保留運作方式的詳細資訊,請參閱下面的常見問題。

身為發行管線的作者,您可以在 [ 保留] 索引標籤上自定義管線發行的保留 原則。

YAML 和建置管線的保留原則相同。 您可以在 [設定] 區段中,在 [管線的專案 設定] 中看到管線的保留設定

全域發行保留原則

如果您使用內部部署 Team Foundation Server 或 Azure DevOps Server,您可以指定專案的發行保留原則預設值和最大值。 您也可以指定版本何時永久終結(從 組建總管中的 [已刪除 ] 索引標籤中移除)。

內部部署版本保留設定

如果您使用 Azure DevOps Services,您可以檢視但無法變更項目的這些設定。

您可以從項目的發行保留設定中檢閱 全域發行保留 原則設定:

  • Azure DevOps Services: https://dev.azure.com/{organization}/{project}/_settings/release?app=ms.vss-build-web.build-release-hub-group
  • 內部部署: https://{your_server}/tfs/{collection_name}/{project}/_admin/_apps/hub/ms.vss-releaseManagement-web.release-project-admin-hub

保留 原則 上限會設定所有發行管線可以保留多久的發行上限。 發行管線的作者無法針對其定義設定設定超出此處指定的值。

默認 保留原則 會設定所有發行管線的預設保留值。 組建管線的作者可以覆寫這些值。

構原則 可協助您在刪除發行后保留一段時間。 無法在個別發行管線中覆寫此原則。

設定集合層級保留原則

針對內部部署伺服器,您也可以使用自定義保留規則來設定集合層級保留原則。 這些保留原則適用於傳統組建管線。 的頁面 https://{your_server}/{collection_name}/_settings/buildqueue 會控管您的最大值和預設值。

顯示如何設定集合層級保留原則的螢幕快照。

使用複製檔案工作來儲存數據的時間更長

您可以使用 [ 複製檔案] 工作 來儲存組建和成品數據的時間超過保留原則中所設定的時間。 複製檔案工作最好是發佈組建成品工作,因為與發佈組建成品工作一起儲存的數據將定期清除和刪除。

- task: CopyFiles@2
  displayName: 'Copy Files to: \\mypath\storage\$(Build.BuildNumber)'
  inputs:
    SourceFolder: '$(Build.SourcesDirectory)'
    Contents: '_buildOutput/**'
    TargetFolder: '\\mypath\storage\$(Build.BuildNumber)'

常見問題集

如果我將執行或發行標示為無限期保留,保留原則仍適用嗎?

否。 當您將個別執行或發行標示為無限期保留時,不會套用管線的保留原則或系統管理員所設定的最大限制。 它會保留,直到您無限期地停止保留為止。

如何? 指定部署至生產環境的執行將會保留更長的時間?

如果您使用傳統版本部署至生產環境,請在發行管線上自定義保留原則。 指定部署至生產環境的發行必須保留的天數。 此外,表示要保留與該版本相關聯的執行。 這會覆寫執行保留原則。

如果您使用多階段 YAML 管線部署至生產環境,您可以設定的唯一保留原則是在項目設定中。 您無法根據部署組建的環境來自定義保留期。

我沒有標記運行無限期地保留。 不過,我看到保留大量執行。 如何防止此狀況?

這可能是下列其中一個原因:

  • 執行會由專案中的人員標示為無限期保留。
  • 執行是由發行所取用,而發行會保留這些執行的保留鎖定。 如上所述,自定義發行保留原則。

如果您認為不再需要執行,或已刪除版本,則可以手動刪除執行。

「要保留的最低版本」設定如何運作?

要保留的最低版本是在階段層級定義。 這表示 Azure DevOps 一律會保留給定數目的最後一個部署版本,以供階段使用,即使發行已過期。 只有在該階段開始部署時,才會將發行視為最低版本,以保留階段。 成功和失敗的部署都會被視為。 暫止核准的版本不會考慮。

當發行部署到具有不同保留期限的多個階段時,保留期間如何決定?

最後的保留期間是藉由考慮天數來保留部署發行的所有階段設定,並花費最多天數來保留這些階段。 要保留 的最低版本會控管在階段層級,且不會根據部署到多個階段的發行而變更。 當發行部署到設定為 true 的階段時,保留相關聯的成品將適用。

我刪除了一些舊版的階段。 此案例將考慮哪些保留期?

刪除階段時,階段層級保留設定現在不適用。 Azure DevOps 會回復至這類案例的專案層級預設保留期。

我的組織要求我們保留組建和發行的時間比設定中允許的還要長。 如何要求較長的保留期?

保留執行或發行比透過保留設定允許的版本還要長的唯一方式,就是手動將它標示為無限期保留。 無法手動設定較長的保留設定。 如需協助,請連絡 Azure DevOps 支援

您也可以探索使用 REST API 的可能性,以便下載執行的相關信息和成品,並將其上傳至您自己的記憶體或成品存放庫。

我失去了一些運行。 是否有辦法找回來?

如果您認為因為服務中的 Bug 而遺失執行,請立即建立支援票證以復原遺失的資訊。 如果建置定義在一周前手動刪除,則無法復原它。 如果因為保留原則而如預期般刪除執行,將無法復原遺失的執行。

如何? 使用Build.Cleanup代理程式的功能嗎?

Build.Cleanup在代理程式上設定功能會導致集區的清除作業只導向至這些代理程式,讓其餘部分可以執行一般工作。 刪除管線執行時,儲存在 Azure DevOps 外部的成品會透過代理程式上的作業執行來清除。 當代理程式集區因清除作業而飽和時,這可能會導致問題。 的解決方案是指定集區中屬於清除代理程式的代理程式子集。 如果有任何代理程式已 Build.Cleanup 設定,只有這些代理程式會執行清除作業,讓其餘的代理程式可以自由繼續執行管線作業。 您可以瀏覽至 [代理程式>功能] 並設定Build.Cleanup等於 1來啟用清除功能。

刪除組建時檔案共用成品會發生什麼事

刪除具有檔案共用成品的組建時,組建代理程式會排入佇列以清除這些檔案。 根據下列準則挑選代理程式來執行此工作:是否有可用的 Build.Cleanup 代理程式? 執行組建的代理程式是否可用? 來自相同集區的代理程式是否可用? 來自類似集區的代理程式是否可用? 是否有任何代理程式可供使用?

在刪除發行之前,發佈為發行一部分的自動化測試結果是否保留?

發行階段內發佈的測試結果會保留為測試結果所設定的保留原則所指定。 在保留發行之前,測試結果不會保留。 如果您需要測試結果,只要發行,請在 [項目設定] 中設定自動測試回合的保留設定,並據以 [永不刪除]。 這可確保只有在刪除發行時,才會刪除測試結果。

是否刪除手動測試結果?

否。 不會刪除手動測試結果。

如何保留版本控制標籤或標記?

警告

任何在建置管線期間套用的版本控制標籤或標籤,都不會從 Sources 工作自動建立,即使刪除組建也一樣。 不過,在組建期間從來源工作自動建立的任何版本控制標籤或標記都會被視為組建成品的一部分,並且會在組建遭到刪除時一起刪除。

如果需要保留版本控制標籤或標記 (即使組建遭到刪除),則必須將其套用為管線中工作的一部分、在管線外部手動加上標籤,否則,必須無限期地保留組建。

其他管線中取用的管線會發生什麼事?

傳統版本會保留其自動取用的管線。

其他管線中取用的管線會發生什麼事?

傳統版本會保留其自動取用的管線。 如果您使用 YAML,您也可以建立多階段 YAML 管線來代表您的發行,並取用其中另一個 YAML 管線作為資源。 只要保留發行管線,資源管線就會自動保留。