在管道内的 azure devops 中推广 python 包

问题描述 投票:0回答:1

在 Azure Devops 中,您可以在所有包级别拥有保留策略,这意味着我们仅保留有限数量的版本。您可以“升级”软件包,但这是一个手动步骤。我们希望在我们的管道中包含该步骤(需要批准才能推广软件包的单独步骤)。

你怎么能这么做?

我无法按照 NuGet 包的类似问题中的步骤使其工作。

azure-devops pypi
1个回答
0
投票

根据您的需求,您需要使用脚本来升级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 包之前。这需要目标用户的批准。

© www.soinside.com 2019 - 2024. All rights reserved.