如果开发人员忘记增加他们正在开发的包中的版本号,我想确保构建管道中出现警告或失败。
目前我们有 NuGet 工件,它们在构建工件中使用版本号进行部署。我希望能够根据 Artifact feed 中部署的内容检查这些内容。
具体来说,如果我们在构建管道中为其生成 PRE RELEASES,我想确保在工件提要中部署的包(在工件提要中标有“发布”视图)不会有最终版本。我想确保任何新的开发都有一个递增的版本号。
我尝试将诸如
ArtifactDeploymentDetectorTask
之类的任务与 powershell
任务结合使用,但我未能成功实现该功能。
是否有任何任务非常适合这个问题?这一切都可以使用
powershell
脚本来完成吗?
这一切都可以使用 powershell 脚本来完成吗?
是的。您可以使用 Rest API:Artifact Details - Get Packages 列出包的所有版本。
然后就可以获取nupkg文件的版本了。
最后,您可以循环该包的所有版本并将其与nupkg文件的当前版本进行比较。然后你可以使用logging命令来设置管道的错误消息。
这是 PowerShell 示例:
$token = "PAT"
$packagename= "pacakgename"
$GetPackageversion="https://feeds.dev.azure.com/{Org}/{Project}/_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
$file=Get-Item "path\xxx.xxx.nupkg"
$name= ($file.name) -split('.nupkg')
$version = $name -split('pacakgename.')
$count = 0
foreach($versionobj in $response.value.versions)
{
$Artifactsversion = $versionobj.version
echo $Artifactsversion
if($Artifactsversion -eq $version)
{
$count = $count + 1
}
}
echo $count
if($count -eq 0)
{
echo "There is no same version"
}
else
{
echo "##vso[task.logissue type=error]The version is existing in the feed."
}