You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Azure DevOps流水线自动触发时,如何更新versionPublish值生成新版本制品

自动更新Azure流水线UniversalPackages任务的versionPublish值的方法

有几种实用的方法可以实现自动更新versionPublish的值,让每次流水线触发时都能以新版本存储制品:

方法一:利用构建编号自动生成版本号

这是最简单的方案,依赖Azure DevOps自带的构建编号机制:

  1. 进入流水线的选项页面,设置构建编号格式,比如用$(Major).$(Minor).$(Rev:r),其中Rev:r会在每次触发构建时自动递增修订号。
  2. 修改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'

每次触发流水线时,系统会自动生成唯一的版本号,无需额外脚本。

方法二:查询现有包版本并递增修订号

如果需要基于已有包的最新版本来递增,可以用脚本实现:

  1. 添加一个PowerShell任务,查询Azure Artifacts中目标包的最新版本,计算出新版本后设置为流水线变量。
  2. 修改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标签管理版本,可以直接复用标签或基于标签递增:

  1. 添加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"
  1. 同样在UniversalPackages任务中用$(NewPackageVersion)作为versionPublish的值即可。

内容的提问来源于stack exchange,提问作者kiran itagi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.22 20:24:51