Azure devops 如何从*.nuspec在Azure管道中仅设置主要和次要NuGet包版本?
目前,我有这样的*.yaml变量,带有一个自动递增的计数器:Azure devops 如何从*.nuspec在Azure管道中仅设置主要和次要NuGet包版本?,azure-devops,nuget,yaml,azure-pipelines,nuget-package,Azure Devops,Nuget,Yaml,Azure Pipelines,Nuget Package,目前,我有这样的*.yaml变量,带有一个自动递增的计数器: variables: solution: '**/*.sln' buildPlatform: 'Any CPU' buildConfiguration: 'Release' majorVersion: '1' minorVersion: '1' patchVersion: $[counter(format('{0}.{1}', variables['majorVersion'], variables['m
variables:
solution: '**/*.sln'
buildPlatform: 'Any CPU'
buildConfiguration: 'Release'
majorVersion: '1'
minorVersion: '1'
patchVersion: $[counter(format('{0}.{1}', variables['majorVersion'], variables['minorVersion']), 0)]
productVersion: $[format('{0}.{1}.{2}', variables['majorVersion'], variables['minorVersion'], variables['patchVersion'])]
和*.nuspec如下所示:
<metadata>
<id>$id$</id>
<version>1.0.0</version> <!--just a placeholder because can't be empty-->
<authors>$author$</authors>
<description>some description</description>
<releaseNotes>some release notes</releaseNotes>
</metadata>
<metadata>
<id>$id$</id>
<version>1.0.0</version> <!--just a placeholder because can't be empty-->
<customVar_MajorVersion>1</customVar_MajorVersion>
<customVar_MinorVersion>1</customVar_MinorVersion>
<authors>$author$</authors>
<description>some description</description>
<releaseNotes>some release notes</releaseNotes>
</metadata>
variables:
solution: '**/*.sln'
buildPlatform: 'Any CPU'
buildConfiguration: 'Release'
majorVersion: $(fromMyNuspec.customVar_MajorVersion)
minorVersion: $(fromMyNuspec.customVar_MinorVersion)
patchVersion: $[counter(format('{0}.{1}', variables['majorVersion'], variables['minorVersion']), 0)]
productVersion: $[format('{0}.{1}.{2}', variables['majorVersion'], variables['minorVersion'], variables['patchVersion'])]
有可能得到我描述的行为吗
我找到的最接近的问题是,但没有公认的答案。您可以尝试在变量组中定义版本变量。然后通过RESTAPI获取
patchVersion1
变量的值,并通过脚本自动递增该值。例如:
示例脚本:
$token = "{PAT token}"
$token = [System.Convert]::ToBase64String([System.Text.Encoding]::ASCII.GetBytes(":$($token)"))
$url1="https://dev.azure.com/{org}/{}pro/_apis/distributedtask/variablegroups?groupIds=5&api-version=6.0-preview.2"
$response1 = Invoke-RestMethod -Uri $url1 -Headers @{Authorization = "Basic $token"} -Method Get
$rev=[int] $response1.value.variables.patchVersion1.value
$rev++
Write-Host "result = $($rev | ConvertTo-Json -Depth 100)"
然后通过RESTAPI更新变量组中版本变量的值。有关详细信息,请参阅此。最后使用nuget pack任务中的变量
此外,您可以查看nuget pack任务中的自动包版本控制选项是否满足您的需要
我想要实现的是将主要和次要版本变量从*.nuspec传递到*.yaml
恐怕没有现成的方法将变量从.nuspec
传递到*.yaml
这是因为Azure管道无法直接解析.nuspec
文件。因此,我们需要通过一些脚本(如powershell)简单地解析.nuspec
文件
我们的团队以前也有类似的要求。我们将收到其他团队开发的nuget软件包的预发布版本。我们需要测试软件包,并将软件包版本从预发布版本更改为正式版本。因此,我们需要从nuspec
文件中获取软件包版本并对其进行修改
要从*.nuspec
获取版本,我们可以使用以下powershell脚本对其进行解析:
$customVar_MajorVersion = ([xml](Get-Content "$(System.DefaultWorkingDirectory)\Test\MyCustom.nuspec")).package.metadata.customVar_MajorVersion
$customVar_MinorVersion = ([xml](Get-Content "$(System.DefaultWorkingDirectory)\Test\MyCustom.nuspec")).package.metadata.customVar_MinorVersion
echo "The customVar_MajorVersion is $customVar_MajorVersion"
echo "The customVar_MinorVersion is $customVar_MinorVersion"
然后,如果我们想保持这些变量的自动递增,我们可以自动递增这些变量,并在上面的powershell任务中使用来设置变量,以便我们可以在下一个任务中使用它:
$customVar_MajorVersion = ([xml](Get-Content "$(System.DefaultWorkingDirectory)\Test\MyCustom.nuspec")).package.metadata.customVar_MajorVersion
$customVar_MinorVersion = ([xml](Get-Content "$(System.DefaultWorkingDirectory)\Test\MyCustom.nuspec")).package.metadata.customVar_MinorVersion
$increment_MajorVersion= 1+"$customVar_MajorVersion"
$increment_MinorVersion= 1+"$customVar_MajorVersion"
Write-Host "##vso[task.setvariable variable=MajorVersion]$increment_MajorVersion"
Write-Host "##vso[task.setvariable variable=MinorVersion]$increment_MinorVersion"
这件事看起来像描述的那样有效,但对我来说确实让事情变得更复杂了。我的问题的主要目的是,是否可以从一个文件*.nuspec配置所有内容。如果仍然需要打开/执行其他内容,则可以像我刚才所做的那样更轻松地执行—在*.nuspec中编写发行说明,在*.yaml中更改次要/主要版本。