Azure devops 如何根据最新发布的NuGet自动设置预发布NuGet的版本?

Azure devops 如何根据最新发布的NuGet自动设置预发布NuGet的版本?,azure-devops,yaml,azure-pipelines,Azure Devops,Yaml,Azure Pipelines,我有两条管道,释放和预释放 在像这样设置的发布管道版本中,计数器用于修补程序并手动设置主要/次要版本: variables: solution: '**/*.sln' buildPlatform: 'Any CPU' buildConfiguration: 'Release' majorVersion: '1' minorVersion: '1' patchVersion: $[counter(format('{0}.{1}', variables['majorVer

我有两条管道,释放和预释放

在像这样设置的发布管道版本中,计数器用于修补程序并手动设置主要/次要版本:

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'])]    
在预发布管道中,我手动检查最新版本的所有主要版本、次要版本和修补程序的版本,最后我只添加Build.BuildNumber以将其声明为预发布版本:

variables:
  solution: '**/*.sln'
  buildPlatform: 'Any CPU'
  buildConfiguration: 'Release'
  majorVersion: '1'  
  minorVersion: '1'
  patchVersion: '2' <!-- if the last release patch version was 1, in the next prerelease I need here 2-->
  productVersionBeta: $[format('{0}.{1}.{2}-{3}', variables['majorVersion'], variables['minorVersion'], variables['patchVersion'], variables['Build.BuildNumber'])] 

因为我没有找到任何关于yaml配置的信息,所以是否可以只使用yaml配置获得所描述的行为


如果仅仅通过配置是不可能的,那么我找到了这个RESTAPI。是否有一种干净的方法可以在管道内部实现它以达到相同的目的?

我认为这是不可能的,您需要使用REST API。请检查此示例:

变量:
orgName:“代码手册”
包装标识:“8e0deb67-89bd-499f-ae8c-1d3814be540a”
步骤:
-pwsh:|
$url=”https://feeds.dev.azure.com/$(orgName)/$(System.TeamProject)/\u api/packaging/Feeds/devops manual/Packages/$(packageId)?api版本=6.0-preview.1“
$packageInfo=Invoke RestMethod-Uri$url-Headers@{Authorization=“Bearer$env:SYSTEM_ACCESSTOKEN”}
写入主机“管道=$($packageInfo |转换为Json-深度100)”
$version=$packageInfo.versions[0]。version
写入主机$version
$sp=$version.Split(“.”)
echo$sp
$majorVersion=$sp[0]
$minorVersion=$sp[1]
$patchVersion=[int]$sp[2]+1
$productVersionBeta=“$majorVersion.$minorVersion.$patchVersion-$(Build.BuildNumber)”
写入主机“##vso[task.setvariable=packageVersion]$version”
写入主机“##vso[task.setvariable=majorVersion]$majorVersion”
写入主机“##vso[task.setvariable=minorVersion]$minorVersion”
写入主机“##vso[task.setvariable=patchVersion]$patchVersion”
写入主机“##vso[task.setvariable=productVersionBeta]$productVersionBeta”
姓名:首字母
-pwsh:|
写入主机'packageVersion:$(packageVersion)'
写入主机'majorVersion:$(majorVersion)'
写入主机'minorVersion:$(minorVersion)'
写入主机“patchVersion:$(patchVersion)”
写入主机'productVersionBeta:$(productVersionBeta)'
我的包的最新版本(我从该端点获得了
packageId
)https://feeds.dev.azure.com/{{organization}/{project}/{u api/packaging/Feeds/devops manual/Packages?api version=6.0-preview.1)是
2.1.2
,通过上述管道,我得到以下值:

packageVersion: 2.1.2
majorVersion: 2
minorVersion: 1
patchVersion: 3
productVersionBeta: 2.1.3-20200901.6

我认为这是不可能开箱即用的,您需要使用RESTAPI。请检查此示例:

变量:
orgName:“代码手册”
包装标识:“8e0deb67-89bd-499f-ae8c-1d3814be540a”
步骤:
-pwsh:|
$url=”https://feeds.dev.azure.com/$(orgName)/$(System.TeamProject)/\u api/packaging/Feeds/devops manual/Packages/$(packageId)?api版本=6.0-preview.1“
$packageInfo=Invoke RestMethod-Uri$url-Headers@{Authorization=“Bearer$env:SYSTEM_ACCESSTOKEN”}
写入主机“管道=$($packageInfo |转换为Json-深度100)”
$version=$packageInfo.versions[0]。version
写入主机$version
$sp=$version.Split(“.”)
echo$sp
$majorVersion=$sp[0]
$minorVersion=$sp[1]
$patchVersion=[int]$sp[2]+1
$productVersionBeta=“$majorVersion.$minorVersion.$patchVersion-$(Build.BuildNumber)”
写入主机“##vso[task.setvariable=packageVersion]$version”
写入主机“##vso[task.setvariable=majorVersion]$majorVersion”
写入主机“##vso[task.setvariable=minorVersion]$minorVersion”
写入主机“##vso[task.setvariable=patchVersion]$patchVersion”
写入主机“##vso[task.setvariable=productVersionBeta]$productVersionBeta”
姓名:首字母
-pwsh:|
写入主机'packageVersion:$(packageVersion)'
写入主机'majorVersion:$(majorVersion)'
写入主机'minorVersion:$(minorVersion)'
写入主机“patchVersion:$(patchVersion)”
写入主机'productVersionBeta:$(productVersionBeta)'
我的包的最新版本(我从该端点获得了
packageId
)https://feeds.dev.azure.com/{{organization}/{project}/{u api/packaging/Feeds/devops manual/Packages?api version=6.0-preview.1)是
2.1.2
,通过上述管道,我得到以下值:

packageVersion: 2.1.2
majorVersion: 2
minorVersion: 1
patchVersion: 3
productVersionBeta: 2.1.3-20200901.6

有一种更简单的方法可以自动设置nuget的预览版本

是的

使用以下
GitVersion.yml

下一版本:1.1
方式:连续交付
增量:继承
标记前缀:'[vV]'
#源分支:[“主”、“开发”、“修补程序”]
忽略:
沙:[]
提交日期:2018-01-01T00:00:00之前
分支机构:
大师:
正则表达式:master$
方式:连续交付
标记:“”
增量:补丁
防止合并分支版本的增量:true
跟踪合并目标:false
跟踪发布分支:false
发布分支:正确吗
发布:
正则表达式:r(elease$|(elease)?[-/]
方式:连续交付
标签:beta
增量:补丁
防止合并分支版本的增量:true
跟踪合并目标:false
跟踪发布分支:false
发布分支:正确吗
特色:
正则表达式:f(特征)?[-/]
模式:连续部署
标签:阿尔法
增量:小调
防止合并分支版本的增量:false
跟踪合并目标:false
跟踪发布分支:false
发布分支:false
GitVersion
可以自动设置Nuget的版本。 如果我在
master
分支中用
v1.1.0
标记提交,然后在
Development
分支中提交并推送另一个提交,则将在工件中创建
1.1.0-alpha.x

更多信息