为生成、发布和测试设置保留策略

Azure DevOps Services | Azure DevOps Server 2020 | Azure DevOps Server 2019 | TFS 2018

注意

在 Microsoft Team Foundation Server (TFS) 2018 和更低版本中,生成和发布管道被称为“定义”,运行被称为“生成”,服务连接被称为“服务终结点”,阶段被称为“环境”,而作业被称为“阶段” 。

使用保留策略可以设置在系统中存储的运行、发布和测试的保留时间。 若要节省存储空间,需要删除较旧的运行、测试和版本。

Project设置中的Azure DevOps中提供了以下保留策略:

  1. 管道 - 设置保留项目、符号、附件、运行和拉取请求运行的时间。
  2. 发布 (经典) - 设置是否保存生成并查看默认和最大保留设置。
  3. 测试 - 设置保持自动和手动测试运行、结果和附件的时长。

Project settings retention policies

注意

如果使用的是本地服务器,则还可以指定项目的保留策略默认值,并在永久销毁发布时指定保留策略默认值。 在本文后面部分详细了解 发布保留 期。

先决条件

默认情况下,参与者、生成管理员、Project管理员和发布管理员组的成员可以管理保留策略。

若要管理测试结果,必须具有以下订阅之一:

还可以购买对Azure Test Plans的每月访问权限,并分配基本 + Test Plans访问级别。 请参阅 “按用户角色测试访问权限”。

配置保留策略

  1. 登录到项目 (https://dev.azure.com/{yourorganization}/{yourproject}) 。

  2. 转到gear icon项目的设置的“设置”选项卡。

  3. “Pipelines”或“测试下的保留期”下选择“设置”或“发布保留”。

    • 选择设置为运行、项目、符号、附件和拉取请求运行配置保留策略。
    • 选择 “发布保留 ”以设置发布保留策略,并配置何时删除或永久销毁版本。
    • 选择 “保留 ”以设置手动和自动测试运行多长时间。

    Retention settings in Project settings

设置运行保留策略

在大多数情况下,无需保留已完成的运行时间超过特定天数。 使用保留策略,可以在删除保留策略之前控制要保留每个运行的 天数

除了定义保留运行天数之外,还可以确定应为每个管道保留的最小运行数。

  1. 转到gear icon项目的设置的“设置”选项卡。

  2. “Pipelines”部分选择设置。

    • 设置保留 项目、符号和附件的天数。
    • 设置保持运行的天数
    • 设置保持拉取请求运行的天数
    • 设置每个管道要保留的最近 运行

警告

Azure DevOps不再支持每管道保留规则。 为 YAML 和经典管道配置保留策略的唯一方法是通过上述项目设置。 无法再配置每管道保留策略。

要为每个管道保留的最近运行数的设置需要更多说明。 此设置的解释因在管道中生成的存储库类型而异。

  • Azure Repos:Azure Pipelines为管道的默认分支和存储库的每个受保护分支保留配置的最新运行数。 配置了任何分支策略的分支被视为受保护的分支。

    例如,请考虑具有两个分支的存储库, main 以及 release。 Imagine分支pipeline's default branchmain,分支release具有分支策略,使其成为受保护的分支。 在这种情况下,如果将策略配置为保留三个运行,则保留分支的最新三个运行 main 和最新的三个运行 release 。 此外,此管道的最新三个运行 (不考虑分支) 也会保留。

    为了进一步阐明此逻辑,让我们说,此管道的运行列表如下所示,其中最近的运行位于顶部。 如果已配置为保留最新的三个运行, (忽略设置) 天数的影响,表将显示将保留哪些运行:

    运行# 分支 保留/未保留 为什么?
    运行 10 主要 保留的 主管道的最新 3 和最新 3
    运行 9 branch1 保留的 管道的最新 3
    运行 8 branch2 保留的 管道的最新 3
    运行 7 主要 保留的 main 的最新 3 个
    运行 6 主要 保留的 main 的最新 3 个
    运行 5 主要 不保留 主管道既不是最新的 3,也不是管道
    运行 4 主要 不保留 主管道既不是最新的 3,也不是管道
    运行 3 branch1 不保留 主管道既不是最新的 3,也不是管道
    运行 2 发布 保留的 最新版本 3
    运行 1 主要 不保留 主管道既不是最新的 3,也不是管道
  • 所有其他 Git 存储库:Azure Pipelines保留整个管道配置的最新运行数。

  • TFVC:Azure Pipelines保留整个管道配置的最新运行数,而不考虑分支。

删除运行的各个部分

当保留策略标记要删除的生成时,可以控制删除与生成相关的信息:

  • 生成记录:可以选择删除整个生成记录,或在删除生成后保留有关生成的基本信息。
  • 源标签:如果将源标记为生成一部分,则可以选择删除 Git) 的标记 (,或生成创建的 TFVC) 的标签 (。
  • 自动测试结果:可以选择删除与生成关联的自动测试结果,例如发布测试结果生成任务) 发布的结果 (。

删除生成时,将删除以下信息:

  • 日志
  • 已发布的项目
  • 已发布的符号

删除运行时,将删除以下信息:

  • 日志
  • 所有管道和生成项目
  • 所有符号
  • 二进制文件
  • 测试结果
  • 运行元数据
  • (Git) 源标签 (TFVC) 或标记

通用包、NuGet、npm 和其他包不会绑定到管道保留。

何时删除运行

保留策略每天处理一次。 策略得到处理变量的时间,因为我们整天分散工作以实现负载均衡。 无法更改此过程。

如果满足以下所有条件,则会删除运行:

  • 它超过了在保留设置中配置的天数
  • 它不是在保留设置中配置的最新运行之一
  • 未标记为无限期保留
  • 发布不会保留它

保留策略每天凌晨 3:00 UTC 运行。 无法更改策略运行时的选项。

在管道运行上自动设置保留租约

保留租约用于管理超出配置的保留期的管道运行的生存期。 可以通过调用 租约 API 在管道运行中添加或删除保留租约。 可以使用脚本在管道中调用此 API,并使用 runId 和 definitionId 的 预定义变量

可以在管道运行中在特定时间段内添加保留租约。 例如,部署到测试环境的管道运行可以保留较短的持续时间,同时可以保留部署到生产环境的运行时间更长。

在管道运行上手动设置保留租约

可以使用管道运行详细信息页上的“更多操作”菜单手动设置要保留的管道运行。

manually retain a run

删除运行

可以使用管道运行详细信息页上的“更多操作”菜单删除运行。

注意

如果当前适用于运行的任何保留策略,则必须删除这些保留策略,然后才能删除运行。 有关说明,请参阅 管道运行详细信息 - 删除运行

delete a run

设置发布保留策略

经典发布管道的发布保留策略确定发布和链接到它的运行保留时间。 使用这些策略,可以控制上次修改或部署每个版本后要保留的 天数 ,以及每个管道应保留 的最小版本数

每次修改或部署到阶段时,发布上的保留计时器都会重置。 要保留设置的最小版本数优先于天数。 例如,如果指定至少保留三个版本,则最近的三个版本将无限期保留 -无论指定的天数如何。 但是,当不再需要这些版本时,可以手动删除这些版本。 有关发布保留工作原理的详细信息,请参阅下面的常见问题解答。

作为发布管道的作者,可以在 “保留 ”选项卡上为管道发布自定义保留策略。

YAML 和生成管道的保留策略相同。 可以在设置部分中PipelinesProject 设置中看到管道的保留设置。

还可以了解如何在本文后面的 阶段的基础上 自定义这些策略。

全局发布保留策略

如果使用本地Team Foundation Server或Azure DevOps Server,则可以指定项目的发布保留策略默认值和最大值。 还可以指定发布何时永久销毁 (从生成资源管理器的 “已删除 ”选项卡中删除) 。

On premises release retention settings

如果使用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页控制最大值和默认值。

Configure server collection settings

注意

在 TFS 中,发布保留管理仅限于指定天数,并且仅在 TFS 2015.3 及更新版本中可用。

特定于阶段的保留策略

你可能希望保留已部署到特定阶段的更多版本。 例如,你的团队可能想要保留:

  • 部署到生产阶段 60 天的发布,至少部署了三个版本。
  • 部署到预生产阶段 15 天的发布,至少部署了一个上次部署的版本。
  • 部署到 QA 阶段 30 天的发布,至少部署了两个上次部署的版本。
  • 部署到开发阶段 10 天的发布,最后一个部署的版本至少为一个。

发布管道的以下示例保留策略满足上述要求:

Configuring the release retention setting for a release pipeline

在此示例中,如果部署到 Dev 的版本未升级到 QA 10 天,则它可能是删除的潜在候选项。 但是,如果将同一版本部署到 QA 8 天后部署到 Dev,则会重置其保留计时器,并在系统中保留 30 天。

为每个管道指定自定义策略时,不能超过管理员设置的最大限制。

生成和发布保留策略之间的交互

链接到版本的生成有自己的保留策略,该策略可能比版本短。 如果要在发布期间保留生成,请为相应的阶段设置 “保留关联的项目 ”复选框。 这会替代生成保留策略,并确保项目在需要重新部署该版本时可用。

删除发布管道、删除发布或保留策略自动删除发布时,关联的生成的保留策略将确定何时删除该生成。

注意

在 TFS 中,生成与发布保留之间的交互在 TFS 2017 及更新版本中可用。

设置测试保留策略

可以设置手动和自动测试运行策略。

手动测试运行保留策略

若要在特定的天数后删除手动测试结果,请在项目级别设置保留限制。 即使删除这些生成,Azure DevOps也会保留与生成相关的手动测试结果。 这样,在分析数据之前,生成策略不会删除测试结果。

  1. 登录到Azure DevOps。 至少需要项目管理员权限。

  2. 转到项目,然后选择 gear icon 页面底部的项目设置。

configure project settings

  1. 在“测试”部分下的“保留期”页中,选择要保留手动测试数据的时长限制。

manual tests retention policies

自动测试运行保留策略

默认情况下,只要保留这些生成,Azure DevOps才会保持与生成相关的自动测试结果。 若要在删除生成后保留测试结果,请编辑生成保留策略。 如果使用 Git 进行版本控制,可以指定根据分支保留自动测试结果的时长。

  1. 登录到Azure DevOps。 至少需要生成级别权限才能编辑生成管道。

  2. 转到项目,然后选择 gear icon 页面底部的项目设置。

manage project settings

  1. 选择gear iconPipelines下的设置并修改保留策略。

edit project settings

其他自动测试结果

若要清理从已删除的生成或与生成无关的测试结果(例如,从外部测试系统发布的结果)的自动测试结果,请在项目级别设置保留限制,如手动测试运行保留策略中所示

设置项目保留策略

可以在管道设置中为管道运行设置项目保留策略。

  1. 登录到项目 (https://dev.azure.com/{yourorganization}/{yourproject}) 。

  2. 转到gear icon项目的设置的“设置”选项卡。

  3. Pipelines中选择设置

  4. 编辑 日期以保留项目、符号和附件

使用“复制文件”任务保存数据的时间更长

可以使用 “复制文件”任务 保存生成和项目数据的时间超过保留策略中设置的时间。 复制文件任务更适用于发布生成Artifacts任务,因为使用发布生成Artifacts任务保存的数据将定期清理和删除。

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

如果要从 Git 存储库生成,还可以逐个分支自定义这些策略。

全局生成保留策略

可以为项目集合指定生成保留策略默认值和最大值。 还可以指定生成何时永久销毁 (从生成资源管理器中的 “已删除 ”选项卡删除) 。

  • TFS 2018: https://{your_server}/tfs/DefaultCollection/_admin/_buildQueue

最大保留策略设置所有生成管道可以保留运行时间的上限。 生成管道的作者无法配置其定义的设置,不能超出此处指定的值。

默认保留策略为所有生成管道设置默认保留值。 生成管道的作者可以重写这些值。

永久销毁版本有助于在删除版本后保留运行一段时间。 无法在单个生成管道中重写此策略。

Git 存储库

如果 存储库类型 为以下任一类型,则可以使用分支筛选器定义多个保留策略:

  • Azure Repos Git 或 TFS Git。
  • GitHub。
  • 其他/外部 Git。

例如,团队可能需要保留:

  • 用户分支生成五天,每个分支至少生成一次成功或部分成功生成。
  • 主分支和功能分支生成 10 天,其中每个分支至少生成成功或部分成功生成三个。 排除要保留更长时间的特殊功能分支。
  • 从特殊功能分支和所有其他分支生成 15 天,每个分支至少成功或部分成功生成。

以下示例生成管道的保留策略满足上述要求:

define git retention policies

为每个管道指定自定义策略时,不能超过管理员设置的最大限制。

清理拉取请求生成

如果使用 拉取请求生成保护 Git 分支,则可以使用保留策略自动删除已完成的生成。 为此,请添加一个策略,该策略保留以下分支筛选器的最低 0 生成数:

  refs/pull/*

retention policies for PR builds

TFVC 和 Subversion 存储库

对于 TFVC 和 Subversion 存储库类型 ,可以使用上面所示的选项修改单个策略。

策略顺序

当系统清除旧版本时,它会根据你指定的顺序根据策略评估每个生成。 可以在列表中拖放策略,以更改此顺序。

“所有”分支策略将自动添加为评估顺序中的最后一个策略,以强制所有其他分支的最大限制。

define git retention policy max shown in pipeline

常见问题解答

如果我将运行或发布标记为无限期保留,保留策略是否仍适用?

不是。 在标记要无限期保留的单个运行或发布时,不会应用管道的保留策略和管理员设置的最大限制。 它将保留,直到你无限期地停止保留它。

如何实现指定部署到生产环境的运行将保留更长时间?

如果使用经典版本部署到生产环境,请在发布管道上自定义保留策略。 指定必须保留部署到生产版本的天数。 此外,指示要保留与该版本关联的运行。 这将替代运行保留策略。

如果使用多阶段 YAML 管道进行生产,则可以配置的唯一保留策略位于项目设置中。 不能根据部署生成的环境自定义保留期。

我没有标记要无限期保留的运行。 但是,我看到正在保留大量运行。 如何防止这种情况?

这可能是出于以下原因之一:

  • 运行由项目中的人员标记为无限期保留。
  • 运行由发布使用,该版本在这些运行中保留保留锁。 按照上述说明自定义发布保留策略。

如果认为不再需要运行,或者如果已发布版本,则可以手动删除运行。

“要保留的最低版本”设置的工作原理是什么?

要保留的最低版本在阶段级别定义。 它表示,即使发布已退出保留期,Azure DevOps也会始终为阶段保留给定的上次部署版本数。 只有在该阶段开始部署时,才会将发布视为在最低版本下保留。 将考虑成功部署和失败部署。 未考虑待审批的发布。

当发布部署到具有不同保留期的多个阶段时,保留期如何决定?

最终保留期是通过考虑天数来保留部署发布的所有阶段的设置,并花费最大天数来保留这些阶段。 要保留的最低版本在阶段级别进行控制,并且不会根据部署到多个阶段的发布而更改。 将发布部署到设置为 true 的阶段时,保留关联的项目将适用。

我删除了一些旧版本的阶段。 对于这种情况,将考虑哪些保留期?

删除阶段后,阶段级别保留设置现在不适用。 Azure DevOps将回退到此类情况下的项目级别默认保留。

我的组织要求我们保留版本和版本的时间比设置中允许的版本长。 如何请求更长的保留期?

保留运行或发布比通过保留设置允许的版本长的唯一方法是手动将其标记为无限期保留。 无法配置更长的保留设置。 还可以探索使用 REST API 的可能性,以便下载有关运行的信息和项目,并将其上传到你自己的存储或项目存储库。

我失去了一些运行。 是否有办法将其找回?

如果你认为由于服务中的 bug 而丢失运行,请立即创建支持票证以恢复丢失的信息。 如果生成定义在一周前手动删除,则无法恢复它。 如果由于保留策略而按预期删除了运行,则无法恢复丢失的运行。

如何实现使用Build.Cleanup代理的功能?

Build.Cleanup在代理上设置功能将导致池的清理作业仅定向到这些代理,使其余部分可以免费执行常规工作。 删除管道运行后,通过代理上的作业运行清理存储在Azure DevOps外部的项目。 当代理池因清理作业而饱和时,这可能会导致问题。 解决方法是指定池中作为清理代理的一部分代理。 如果设置了 Build.Cleanup 任何代理,则只有这些代理将运行清理作业,使其余代理可以自由地继续运行管道作业。

删除生成时文件共享Artifacts会发生什么情况

删除包含文件共享的生成Artifacts时,生成代理上会排队执行新的生成任务,以清理这些文件。 根据以下条件选择代理来执行此任务:是否有可用的 Build.Cleanup 代理? 运行生成的代理是否可用? 同一池中的代理是否可用? 来自类似池的代理是否可用? 是否有任何代理可用?

作为发布一部分发布的自动测试结果是否在发布被删除之前保留?

发布阶段内发布的测试结果由为测试结果配置的保留策略指定保留。 在保留发布之前,测试结果不会保留。 如果需要测试结果,只要发布,请相应地在Project设置中设置自动测试运行的保留设置,以便从不删除。 这可确保仅在删除发布时删除测试结果。

手动测试结果是否被删除?

不是。 不会删除手动测试结果。

如何实现保留版本控件标签或标记?

注意

即使在删除生成管道期间应用的任何版本控制标签或标记,也不会自动从源任务创建。 但是,在生成期间从源任务自动创建的任何版本控制标签或标记都被视为生成项目的一部分,在删除生成时将被删除。

如果需要保留版本控制标签或标记,即使删除生成,它们也需要作为管道中任务的一部分应用,手动标记在管道外部,或者需要无限期地保留生成。