Azure DevOps Server 2019 保留策略不再有效
Azure DevOps Server 2019 Retention Policy no longer working
上周我们在 ADS 2019.1 服务器上从 TFVC 迁移到 Git。
在我们的验证管道中,我们有一个积极的保留政策。
它设置为 Keep for 2 days,10 个 good builds with the branch filter * 并且清除所有复选框
ADS 将其写为:+refs/heads/*
我们看到的是,自从我们迁移后,none 个 Git 构建已被删除。从过去的 8 天开始,我们现在有数百个版本下降了数 GB。
* 是否使用了正确的分支过滤器?这是 ADS 输入的默认设置,我们确实希望通过此策略删除所有分支的所有构建。
我也试过**,但没有改变,在构建结果页面我看到所有构建都是从一个临时分支构建的,有一个 4 位数的数字,这可能是拉取请求号。
我们如何确保根据保留策略清理构建?
生成定义未链接到发布管道。构建是由开发人员创建的合并请求触发的。拉取请求标记为已完成。
另一个构建定义,一个在每次提交后运行的 CI 触发器,似乎仍然根据定义的保留策略删除构建。
我们的 TFS 保留策略设置的图片。清理主构建,不清理拉取请求构建
上周手动清理后 TFS 中最旧构建的列表,这些构建现在已有 4-5 天,超过了保留策略的 2 天限制。
您还可以看到它们后面没有保留锁。
已删除构建的概览。您可以在其中看到 'master' 个已被保留策略删除的构建。
显示主版本在 2 天保留策略设置后被删除
Azure DevOps Server 2019 Retention Policy no longer working
同意马特的观点。如果发布管道的工件是构建,构建管道将使用发布保留而不是构建保留:
所以,我们需要检查发布保留,Project Settings
->Release retention
:
您可以从文档 Build and release retention policies-Q&A.
中查看此信息
此外,如果构建无限期保留,则保留政策将不再适用。
希望这对您有所帮助。
您也可以试试:
- 选项卡"Retention"
- Select 一项政策(在您的情况下:"Keep for 2 days, […]")
- 在"Branch filters"下再添加一个
- 类型:"Include",分支规范:"refs/pull/*"
说明:
如果您在构建代理的源文件夹(名为 s
)和 运行 git branch --all
中打开一个终端,您将看到每个拉取请求(例如第 1234 章此外,如果将分支规范 *
与左侧显示的路径 (+refs/heads/*
) 进行比较,您会发现它实际上 not 匹配所有分支……
保留政策 UI 极具误导性,因为 *
并不是真正的 *
- 它是 refs/heads/*
。当 UI(或者 API)保存 'branch specification' 时,它会隐式地将 +refs/heads/
添加到您输入的任何内容中。 main
变为 +refs/heads/main
,mybranch/*
变为 +refs/heads/mybranch/*
。
您可以通过查看 [Build] 中 RetentionPolicy 列中的 JSON 来了解这一点。[tbl_Definition](假设默认收集数据库名称):
SELECT [DefinitionName],[RetentionPolicy]
FROM [Tfs_DefaultCollection].[Build].[tbl_Definition]
默认构建保留策略永远不会匹配拉取请求分支,存储为:
[
{
"branches": [
"+refs/heads/*"
],
"artifacts": [],
"artifactTypesToDelete": [
"FilePath",
"SymbolStore"
],
"daysToKeep": 10,
"minimumToKeep": 2,
"deleteBuildRecord": true,
"deleteTestResults": true
}
]
TFS 作业代理的构建保留策略作业针对每个构建定义调用存储过程 [Build].[prc_GetBuildsForRetention]
一次,以获取要清理的潜在构建列表。发布保留的构建已从查询结果中排除。
您可以通过这样的查询自行尝试(更新 definitionId 和 maxFinishTime,可能还有 dataspaceId 和 partitionId):
EXEC [Tfs_DefaultCollection].[Build].[prc_GetBuildsForRetention]
@partitionId = 1,
@dataspaceId = 22,
@definitionId = 164,
@minFinishTime = '0001-01-01',
@maxFinishTime = '2021-08-03',
@maxBuilds = 1000
您会看到类似这样的结果:
要在您的保留策略中包含拉取请求,请添加一个新条目并在分支规范框中键入 refs/pull/*
。这将作为 +refs/pull/*
持续到 JSON。您可能希望将 'days to keep' 设置得较低(我使用 1),并将 'minimum to keep' 设置得较低(我使用 0)。我们的 PR 构建将在几个小时后过期,因此将它们保留更长的时间没有什么好处。
为了将来参考,构建保留策略作业代码位于 Microsoft.TeamFoundation.Build2.Server.Extensions.BuildRetentionPolicyJob
class 中的 <installFolder>\Application Tier\TFSJobAgent\Plugins\Microsoft.TeamFoundation.Build2.Server.Extensions.dll
。
上周我们在 ADS 2019.1 服务器上从 TFVC 迁移到 Git。
在我们的验证管道中,我们有一个积极的保留政策。 它设置为 Keep for 2 days,10 个 good builds with the branch filter * 并且清除所有复选框 ADS 将其写为:+refs/heads/*
我们看到的是,自从我们迁移后,none 个 Git 构建已被删除。从过去的 8 天开始,我们现在有数百个版本下降了数 GB。
* 是否使用了正确的分支过滤器?这是 ADS 输入的默认设置,我们确实希望通过此策略删除所有分支的所有构建。
我也试过**,但没有改变,在构建结果页面我看到所有构建都是从一个临时分支构建的,有一个 4 位数的数字,这可能是拉取请求号。
我们如何确保根据保留策略清理构建?
生成定义未链接到发布管道。构建是由开发人员创建的合并请求触发的。拉取请求标记为已完成。
另一个构建定义,一个在每次提交后运行的 CI 触发器,似乎仍然根据定义的保留策略删除构建。
我们的 TFS 保留策略设置的图片。清理主构建,不清理拉取请求构建
上周手动清理后 TFS 中最旧构建的列表,这些构建现在已有 4-5 天,超过了保留策略的 2 天限制。
您还可以看到它们后面没有保留锁。
已删除构建的概览。您可以在其中看到 'master' 个已被保留策略删除的构建。
显示主版本在 2 天保留策略设置后被删除
Azure DevOps Server 2019 Retention Policy no longer working
同意马特的观点。如果发布管道的工件是构建,构建管道将使用发布保留而不是构建保留:
所以,我们需要检查发布保留,Project Settings
->Release retention
:
您可以从文档 Build and release retention policies-Q&A.
中查看此信息此外,如果构建无限期保留,则保留政策将不再适用。
希望这对您有所帮助。
您也可以试试:
- 选项卡"Retention"
- Select 一项政策(在您的情况下:"Keep for 2 days, […]")
- 在"Branch filters"下再添加一个
- 类型:"Include",分支规范:"refs/pull/*"
说明:
如果您在构建代理的源文件夹(名为 s
)和 运行 git branch --all
中打开一个终端,您将看到每个拉取请求(例如第 1234 章此外,如果将分支规范 *
与左侧显示的路径 (+refs/heads/*
) 进行比较,您会发现它实际上 not 匹配所有分支……
保留政策 UI 极具误导性,因为 *
并不是真正的 *
- 它是 refs/heads/*
。当 UI(或者 API)保存 'branch specification' 时,它会隐式地将 +refs/heads/
添加到您输入的任何内容中。 main
变为 +refs/heads/main
,mybranch/*
变为 +refs/heads/mybranch/*
。
您可以通过查看 [Build] 中 RetentionPolicy 列中的 JSON 来了解这一点。[tbl_Definition](假设默认收集数据库名称):
SELECT [DefinitionName],[RetentionPolicy]
FROM [Tfs_DefaultCollection].[Build].[tbl_Definition]
默认构建保留策略永远不会匹配拉取请求分支,存储为:
[
{
"branches": [
"+refs/heads/*"
],
"artifacts": [],
"artifactTypesToDelete": [
"FilePath",
"SymbolStore"
],
"daysToKeep": 10,
"minimumToKeep": 2,
"deleteBuildRecord": true,
"deleteTestResults": true
}
]
TFS 作业代理的构建保留策略作业针对每个构建定义调用存储过程 [Build].[prc_GetBuildsForRetention]
一次,以获取要清理的潜在构建列表。发布保留的构建已从查询结果中排除。
您可以通过这样的查询自行尝试(更新 definitionId 和 maxFinishTime,可能还有 dataspaceId 和 partitionId):
EXEC [Tfs_DefaultCollection].[Build].[prc_GetBuildsForRetention]
@partitionId = 1,
@dataspaceId = 22,
@definitionId = 164,
@minFinishTime = '0001-01-01',
@maxFinishTime = '2021-08-03',
@maxBuilds = 1000
您会看到类似这样的结果:
要在您的保留策略中包含拉取请求,请添加一个新条目并在分支规范框中键入 refs/pull/*
。这将作为 +refs/pull/*
持续到 JSON。您可能希望将 'days to keep' 设置得较低(我使用 1),并将 'minimum to keep' 设置得较低(我使用 0)。我们的 PR 构建将在几个小时后过期,因此将它们保留更长的时间没有什么好处。
为了将来参考,构建保留策略作业代码位于 Microsoft.TeamFoundation.Build2.Server.Extensions.BuildRetentionPolicyJob
class 中的 <installFolder>\Application Tier\TFSJobAgent\Plugins\Microsoft.TeamFoundation.Build2.Server.Extensions.dll
。