如何将工件自动升级到Azure DevOps中的提要视图?

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

我们的构建工件是一个章鱼nuget包。发布构建后,它将进入QA阶段,在此阶段,工件将通过Octopus进行部署。该章鱼直接从Azure Artifacts nuget提要中使用它。

如果部署和后续测试成功,我们希望将该工件升级到Azure Artifacts nuget提要的Release视图,因为我们认为它为我们提供了一个不同的nuget URL,供下一阶段使用的另一个章鱼可以使用该URL(出于历史原因,我们在每个阶段都专门设置了章鱼-努力改变这一点,但这需要时间。

我们可以手动升级,但我们想自动升级。如何做到这一点?

我们正在本地TFS 2019 RC2上对其进行测试。

enter image description here

编辑1

[建议的插件似乎未安装在本地TFS 2019 RC2上:

enter image description here

azure-devops release azure-pipelines-release-pipeline release-management
3个回答
1
投票

最近,我还努力尝试使用TFS实现版本。我已经制作了一些PowerShell脚本(将其他脚本从网络上移出)来进行软件包版本控制。

https://gist.github.com/oceanexplorer/6a91930419b35c1923974af265777a5f

https://gist.github.com/oceanexplorer/35e0f26962018dc8578c745060365c15

[第一步是我的构建管道,我使用“ Update AssemblyInfo”任务来设置构建版本,然后将其嵌入到DLL中。

https://marketplace.visualstudio.com/items?itemName=sebastianlux.UpdateAssemblyInfo

最初,我将上述脚本嵌入到我的项目中,以使事情顺利进行,但是最终在发布管道中,我有一个任务,该任务通过“ NuGet Install”任务来部署这些构建脚本,该任务可以有效地从提要中提取并解压缩它们。 >

在发布管道中,我有一个任务“版本包”,这是一个自定义的PowerShell脚本,该脚本调用了以上两个要点中定义的函数,它们的作用是解压缩从构建管道中创建并放置的NuGet包。在工件目录中,将正确的版本应用于该软件包,然后将其压缩后备份。我在构建管道中使用了以下内部版本号格式:

$(version.major).$(version.minor).$(version.patch).$(Date:yyyyMMdd)$(Rev:r)-CI

1.0.0.201902051-CI

This will produce a semantic build number format of:

1.0.0-alpha.201902051

我使用嵌入式PowerShell任务调用脚本

##-------------------------------------------
## Import Build Scripts
##-------------------------------------------
gci -Recurse "$(System.DefaultWorkingDirectory)\scripts\*.psm1" | ForEach-Object { Import-Module $_.FullName }

##-------------------------------------------
## Version Files
##-------------------------------------------
Expand-NugetPackages -packagesDirectory "$(artifact.directory)" -Verbose
Add-VersionToAssemblies -suffix "$(Release.EnvironmentName)" -semVer "2.0" -artifactsToApplyTo "nuspec" -isRelease $(isRelease) -Verbose
Compress-NugetPackages -packagesDirectory "$(artifact.directory)" -Verbose

然后执行NuGet推送任务来推送软件包

Nuget Push task他们是另一个内联PowerShell脚本,用于设置软件包供稿的发布视图:

##-------------------------------------------
## Import Build Scripts
##-------------------------------------------
gci -Recurse "$(System.DefaultWorkingDirectory)\scripts\*.psm1" | ForEach-Object { Import-Module $_.FullName }

##-------------------------------------------
## Set Package Quality
##-------------------------------------------
Set-PackageQuality -feedName "Libraries" -packageId $(nuget.packageId) -packageVersion $env:semanticVersion -packageQuality $(Release.EnvironmentName)

1
投票
$organisationName = '' # Name of organisation
$projectName = '' # Name of project
$feedName = '' # Name of Azure Artifacts feed
$viewName = 'Release' # I believe this can also be Prerelease, but I've not tried it

# List of names of packages within Azure Artifacts feed to be promoted
$packagesToPromote = @('')

# Need a personal access token for this script to work
# PAT token should be assigned to Packaging (Read, Write and Manage) scopes
$azureArtifactsPAT = '' 
$AzureArtifactsPAT_Base64 = [Convert]::ToBase64String([Text.Encoding]::ASCII.GetBytes(":$($azureArtifactsPAT)"))
$restAPICallHeader = @{ Authorization = "Basic $AzureArtifactsPAT_Base64" }

$feedBaseURL = "https://feeds.dev.azure.com/$organisationName/$projectName/_apis/packaging/feeds"
$packageBaseURL = "https://pkgs.dev.azure.com/$organisationName/$projectName/_apis/packaging/feeds"

$feedIdURL = "$feedBaseURL/$feedName/?api-version=5.1-preview.1"
$feedIdResponse = (Invoke-RestMethod -Method Get -Uri $feedIdUrl -Headers $restAPICallHeader -ContentType 'application/json')
$feedId = $feedIdResponse.id

$viewIdURL = "$feedBaseURL/$feedId/views/$viewName/?api-version=5.1-preview.1"
$viewIdResponse = (Invoke-RestMethod -Method Get -Uri $viewIdUrl -Headers $restAPICallHeader -ContentType 'application/json')
$viewId = $viewIdResponse.id


$restAPICallBodyJson = @{
    views = @{
        op = 'add'
        path = '/views/-'
        value = "$viewId"
    }
}
$restAPICallBody = (ConvertTo-Json $restAPICallBodyJson)

foreach ($packageName in $packagesToPromote) {

    $packageQueryUrl = "$feedBaseURL/$feedId/packages?api-version=5.1-preview.1&packageNameQuery=$packageName"
    $packagesResponse = (Invoke-RestMethod -Method Get -Uri $packageQueryUrl -Headers $restAPICallHeader -ContentType 'application/json')
    $latestPackageVersion = ($packagesResponse.value.versions | ? { $_.isLatest -eq $True } | Select -ExpandProperty version)
    $encodedPackageVersion = [System.Web.HttpUtility]::UrlEncode($latestPackageVersion)

    Write-Host "Package Name: $packageName"
    Write-Host "Package Version: $latestPackageVersion"

    $releaseViewURL = $packageBaseURL `
    + "/$($feedId)" `
    + "/nuget/packages/$packageName" `
    + "/versions/$encodedPackageVersion" `
    + "?api-version=5.1-preview.1"

    $response = Invoke-RestMethod -Method Patch -Uri $releaseViewURL -Headers $restAPICallHeader -ContentType 'application/json' -Body $restAPICallBody
    Write-Host $response
}

0
投票

根据Azure DevOps documentation,建议从CI / CD管道中完成市场任务Promote package to Release View

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