Azure DevOps流水线自动触发时,如何更新versionPublish值生成新版本制品
自动更新Azure流水线UniversalPackages任务的versionPublish值的方法
有几种实用的方法可以实现自动更新versionPublish的值,让每次流水线触发时都能以新版本存储制品:
方法一:利用构建编号自动生成版本号
这是最简单的方案,依赖Azure DevOps自带的构建编号机制:
- 进入流水线的选项页面,设置构建编号格式,比如用
$(Major).$(Minor).$(Rev:r),其中Rev:r会在每次触发构建时自动递增修订号。 - 修改UniversalPackages任务的
versionPublish为$(Build.BuildNumber),配置示例:
- task: UniversalPackages@0 displayName: 'Publish to Azure Artifact feed' inputs: command: 'publish' publishDirectory: '$(Build.SourcesDirectory)/abc' feedsToUsePublish: 'internal' vstsFeedPublish: 'xyz' vstsFeedPackagePublish: 'bundle' versionOption: 'custom' versionPublish: '$(Build.BuildNumber)' publishedPackageVar: 'ReleaseBundle#1'
每次触发流水线时,系统会自动生成唯一的版本号,无需额外脚本。
方法二:查询现有包版本并递增修订号
如果需要基于已有包的最新版本来递增,可以用脚本实现:
- 添加一个PowerShell任务,查询Azure Artifacts中目标包的最新版本,计算出新版本后设置为流水线变量。
- 修改UniversalPackages任务引用这个变量,完整配置示例:
- task: PowerShell@2 displayName: '计算新的包版本号' inputs: targetType: 'inline' script: | $feedName = "xyz" $packageName = "bundle" # 查询最新版本,首次发布时无版本则默认用1.0.0 $latestVersion = az artifacts universal show --feed $feedName --name $packageName --organization $(System.TeamFoundationCollectionUri) --project $(System.TeamProject) --query version -o tsv if (-not $latestVersion) { $newVersion = "1.0.0" } else { $versionParts = $latestVersion -split '\.' $newRevision = [int]$versionParts[2] + 1 $newVersion = "$($versionParts[0]).$($versionParts[1]).$newRevision" } # 将新版本设置为流水线变量 Write-Host "##vso[task.setvariable variable=NewPackageVersion]$newVersion" - task: UniversalPackages@0 displayName: 'Publish to Azure Artifact feed' inputs: command: 'publish' publishDirectory: '$(Build.SourcesDirectory)/abc' feedsToUsePublish: 'internal' vstsFeedPublish: 'xyz' vstsFeedPackagePublish: 'bundle' versionOption: 'custom' versionPublish: '$(NewPackageVersion)' publishedPackageVar: 'ReleaseBundle#1'
注意:要确保流水线服务账号有查询Azure Artifacts的权限。
方法三:基于Git标签生成版本号
如果项目用Git标签管理版本,可以直接复用标签或基于标签递增:
- 添加PowerShell任务获取最新Git标签,计算新版本:
- task: PowerShell@2 displayName: '从Git标签生成版本号' inputs: targetType: 'inline' script: | # 获取最新的Git标签,无标签则默认1.0.0 $latestTag = git describe --abbrev=0 --tags 2>$null if (-not $latestTag) { $newVersion = "1.0.0" } else { $versionParts = $latestTag -split '\.' $newRevision = [int]$versionParts[2] + 1 $newVersion = "$($versionParts[0]).$($versionParts[1]).$newRevision" } Write-Host "##vso[task.setvariable variable=NewPackageVersion]$newVersion"
- 同样在UniversalPackages任务中用
$(NewPackageVersion)作为versionPublish的值即可。
内容的提问来源于stack exchange,提问作者kiran itagi
相关产品推荐
相关产品推荐

