Azure devops 如何删除DevOps工件中的所有上游包?
我们不再希望在工件提要中使用上游源,但由于某些原因,即使在删除上游连接之后,包仍然存在。有没有办法删除这些包?我已尝试删除所有软件包上的最新版本,但这就是它的建议:它只删除第一个版本,而保留所有其他软件包版本不变。您可以设置哪个版本也适用于来自上游源的软件包 随着时间的推移,提要中托管的每个包的版本数可能会快速增长。您可以设置保留策略以自动删除旧包并节省存储空间Azure devops 如何删除DevOps工件中的所有上游包?,azure-devops,nuget,azure-artifacts,Azure Devops,Nuget,Azure Artifacts,我们不再希望在工件提要中使用上游源,但由于某些原因,即使在删除上游连接之后,包仍然存在。有没有办法删除这些包?我已尝试删除所有软件包上的最新版本,但这就是它的建议:它只删除第一个版本,而保留所有其他软件包版本不变。您可以设置哪个版本也适用于来自上游源的软件包 随着时间的推移,提要中托管的每个包的版本数可能会快速增长。您可以设置保留策略以自动删除旧包并节省存储空间 最大版本数:允许您选择要保留的软件包版本数 保留最近下载的软件包的天数。只有在未按此处设置的天数下载包时,才会删除包 我知道这并不
- 最大版本数:允许您选择要保留的软件包版本数
- 保留最近下载的软件包的天数。只有在未按此处设置的天数下载包时,才会删除包
- 该软件包的已发布版本数达到最大版本数限制,并且
- 在保存最近下载的软件包的天数内,尚未下载该软件包的版本
- 最大版本数:允许您选择要保留的软件包版本数
- 保留最近下载的软件包的天数。只有在未按此处设置的天数下载包时,才会删除包
- 该软件包的已发布版本数达到最大版本数限制,并且
- 在保存最近下载的软件包的天数内,尚未下载该软件包的版本
DELETE https://pkgs.dev.azure.com/{organization}/{project}/_apis/packaging/feeds/{feedId}/nuget/packages/{packageName}/versions/{packageVersion}?api-version=6.0-preview.1
首先,我们需要通过restapi()和该提要()中的所有包获取NuGet提要的FeedId
这里的一个重要问题是,我们需要确定这些包中哪些来自上游来源。REST API()有属性directUpstreamSourceId
:
现在,我们可以根据该字段是否存在来判断包是否是上游源包
其次,在获得所有上游源包的Id
之后,我们可以循环使用restapi()来获得包的所有版本
第三,在获得所有版本后,我们可以通过restapi()循环删除该包的所有版本
下面是我的PowerShell脚本,用于测试此功能:
$connectionToken="Your PAT Here"
$base64AuthInfo= [System.Convert]::ToBase64String([System.Text.Encoding]::ASCII.GetBytes(":$($connectionToken)"))
$PackagesUrl = "https://feeds.dev.azure.com/{organization}/{project}/_apis/packaging/Feeds/{feedId}/packages?api-version=6.0-preview.1"
Write-Host "URL: $PackagesUrl"
$PackagesInFeed = (Invoke-RestMethod -Uri $PackagesUrl -Method Get -UseDefaultCredential -Headers @{Authorization=("Basic {0}" -f $base64AuthInfo)})
$packagesId = $PackagesInFeed.value.id
$UpstreamSourceParameters= $PackagesInFeed.value.versions | Get-Member -MemberType Properties
$UpstreamSource = $UpstreamSourceParameters[0].name
Write-Host "The Upstream Source Parameter name: $UpstreamSource"
ForEach ($PI in $packagesId)
{
if ($UpstreamSource -ne $null)
{
$PackageVersionUrl = "https://feeds.dev.azure.com/{organization}/{project}/_apis/packaging/Feeds/{feedId}/packages/$($PI)/versions?api-version=6.0-preview.1"
$PackageVersions = (Invoke-RestMethod -Uri $PackageVersionUrl -Method Get -UseDefaultCredential -Headers @{Authorization=("Basic {0}" -f $base64AuthInfo)})
$PackageNameUrl = "https://feeds.dev.azure.com/{organization}/{project}/_apis/packaging/Feeds/{feedId}/packages/$($PI)?api-version=6.0-preview.1"
$PackageNames = (Invoke-RestMethod -Uri $PackageNameUrl -Method Get -UseDefaultCredential -Headers @{Authorization=("Basic {0}" -f $base64AuthInfo)})
$VersionsId = $PackageVersions.value.version
$packageName = $PackageNames.name
Write-Host "Package Versions: $VersionsId"
Write-Host "Package Name: $packageName"
ForEach ($VI in $VersionsId)
{
$DeleteUrl = "https://pkgs.dev.azure.com/{organization}/{project}/_apis/packaging/feeds/{feedId}/nuget/packages/$($packageName)/versions/$($VI)?api-version=6.0-preview.1"
$Member = (Invoke-RestMethod -Uri $DeleteUrl -Method DELETE -UseDefaultCredential -Headers @{Authorization=("Basic {0}" -f $base64AuthInfo)})
}
}
elseif($targetTask.result -eq "Failed")
{
Write-Host ("This is package not from upstream source!")
}
}
注意:如果提要范围是组织,请删除RESTAPI URL中的字段/{project}
以下是我的测试结果。正如您在上一个屏幕截图中所看到的那样,初始编号是317
。我中止了脚本以避免删除所有上游包
如何删除DevOps工件中的所有上游包
事实上,目前还没有现成的方法来删除DevOps工件中的所有上游包(包括所有版本)
有一个关于它的关闭用户声音:。如果您对此功能感兴趣,可以打开新的用户语音建议;我愿意投你一票
作为解决方法,我们可以循环使用REST API()来删除上游包的所有版本:
DELETE https://pkgs.dev.azure.com/{organization}/{project}/_apis/packaging/feeds/{feedId}/nuget/packages/{packageName}/versions/{packageVersion}?api-version=6.0-preview.1
首先,我们需要通过restapi()和该提要()中的所有包获取NuGet提要的FeedId
这里的一个重要问题是,我们需要确定这些包中哪些来自上游来源。REST API()有属性directUpstreamSourceId
:
现在,我们可以根据该字段是否存在来判断包是否是上游源包
其次,在获得所有上游源包的Id
之后,我们可以循环使用restapi()来获得包的所有版本
第三,在获得所有版本后,我们可以通过restapi()循环删除该包的所有版本
下面是我的PowerShell脚本,用于测试此功能:
$connectionToken="Your PAT Here"
$base64AuthInfo= [System.Convert]::ToBase64String([System.Text.Encoding]::ASCII.GetBytes(":$($connectionToken)"))
$PackagesUrl = "https://feeds.dev.azure.com/{organization}/{project}/_apis/packaging/Feeds/{feedId}/packages?api-version=6.0-preview.1"
Write-Host "URL: $PackagesUrl"
$PackagesInFeed = (Invoke-RestMethod -Uri $PackagesUrl -Method Get -UseDefaultCredential -Headers @{Authorization=("Basic {0}" -f $base64AuthInfo)})
$packagesId = $PackagesInFeed.value.id
$UpstreamSourceParameters= $PackagesInFeed.value.versions | Get-Member -MemberType Properties
$UpstreamSource = $UpstreamSourceParameters[0].name
Write-Host "The Upstream Source Parameter name: $UpstreamSource"
ForEach ($PI in $packagesId)
{
if ($UpstreamSource -ne $null)
{
$PackageVersionUrl = "https://feeds.dev.azure.com/{organization}/{project}/_apis/packaging/Feeds/{feedId}/packages/$($PI)/versions?api-version=6.0-preview.1"
$PackageVersions = (Invoke-RestMethod -Uri $PackageVersionUrl -Method Get -UseDefaultCredential -Headers @{Authorization=("Basic {0}" -f $base64AuthInfo)})
$PackageNameUrl = "https://feeds.dev.azure.com/{organization}/{project}/_apis/packaging/Feeds/{feedId}/packages/$($PI)?api-version=6.0-preview.1"
$PackageNames = (Invoke-RestMethod -Uri $PackageNameUrl -Method Get -UseDefaultCredential -Headers @{Authorization=("Basic {0}" -f $base64AuthInfo)})
$VersionsId = $PackageVersions.value.version
$packageName = $PackageNames.name
Write-Host "Package Versions: $VersionsId"
Write-Host "Package Name: $packageName"
ForEach ($VI in $VersionsId)
{
$DeleteUrl = "https://pkgs.dev.azure.com/{organization}/{project}/_apis/packaging/feeds/{feedId}/nuget/packages/$($packageName)/versions/$($VI)?api-version=6.0-preview.1"
$Member = (Invoke-RestMethod -Uri $DeleteUrl -Method DELETE -UseDefaultCredential -Headers @{Authorization=("Basic {0}" -f $base64AuthInfo)})
}
}
elseif($targetTask.result -eq "Failed")
{
Write-Host ("This is package not from upstream source!")
}
}
注意:如果提要范围是组织,请删除RESTAPI URL中的字段/{project}
以下是我的测试结果。正如您在上一个屏幕截图中所看到的那样,初始编号是317
。我中止了脚本以避免删除所有上游包
我很害怕。是否可以只设置其中一个?aka,只保留这么多版本,但保留包