在 Azure Devops 中,您可以在所有包级别拥有保留策略,这意味着我们仅保留有限数量的版本。您可以“升级”软件包,但这是一个手动步骤。我们希望在我们的管道中包含该步骤(需要批准才能推广软件包的单独步骤)。
你怎么能这么做?
我无法按照 NuGet 包的类似问题中的步骤使其工作。
根据您的需求,您需要使用脚本来升级python包。
我建议您可以使用以下Rest API:
Post https://pkgs.dev.azure.com/{OrganizationName}/{ProjectName}/_apis/packaging/feeds/{feedId}/pypi/packagesBatch?api-version=6.1-preview.1
请求正文:
{
"data":
{
"viewId":"prerelease/release"
},
"operation":0,
"packages":[{
"id":"{packagename}",
"version":"{versionnumber}"
}]
}
您可以使用 Rest API:Artifact Details - Get Packages 获取所有版本的 python 包。
Get https://feeds.dev.azure.com/{organizationanme}/{ProjectName}/_apis/packaging/Feeds/{FeedId}/packages?packageNameQuery={packagename}&includeAllVersions=true&api-version=7.1-preview.1
我们可以使用PowerShell脚本来运行上面的Rest API来推广python包。
例如:
$token = "PAT"
$packagename= "packagename"
$GetPackageversion="https://feeds.dev.azure.com/{organizationName}/{ProjectName}/_apis/packaging/Feeds/{FeedId}/packages?packageNameQuery=$($packagename)&includeAllVersions=true&api-version=7.1-preview.1"
$token = [System.Convert]::ToBase64String([System.Text.Encoding]::ASCII.GetBytes(":$($token)"))
$response = Invoke-RestMethod -Uri $GetPackageversion -Headers @{Authorization = "Basic $token"} -Method Get -ContentType application/json
foreach($versionobj in $response.value.versions)
{
$version = $versionobj.version
echo $version
$PromoteView="https://pkgs.dev.azure.com/{Organizationname}/{ProjectName}/_apis/packaging/feeds/{FeedId}/pypi/packagesBatch?api-version=6.1-preview.1"
$body= "{
`"data`":
{
`"viewId`":`"release`"
},
`"operation`":0,
`"packages`":[{
`"id`":`"$packagename`",
`"version`":`"$version`"
}]
}
"
$response = Invoke-RestMethod -Uri $PromoteView -Headers @{Authorization = "Basic $token"} -Method Post -Body $body -ContentType application/json
}
结果:
在 Pipeline 中,您可以在运行 PowerShell 脚本的作业之前添加无代理作业。然后您可以在无代理作业中添加任务:手动验证。
例如:
在这种情况下,在运行 Powershell 脚本来提升 python 包之前。这需要目标用户的批准。