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

构建管道版本校验:避免同版本NuGet包重复发布及版本未递增

NuGet版本号校验:构建管道自动拦截未递增版本的方案

有没有现成任务可用?

Azure DevOps官方市场里没有完全贴合你需求的开箱即用任务,但可以用NuGet命令结合自定义逻辑实现,或者找社区维护的版本校验类第三方任务。不过更推荐用自定义PowerShell脚本,灵活度更高,能精准匹配你的规则。

完全用PowerShell脚本实现的方案

下面是可以直接集成到构建管道的脚本,核心逻辑:拿当前构建的预发布包版本,去Artifact Feed里查询是否存在同核心版本的正式Release包,存在则直接终止构建;如果是正式包,也可额外校验是否重复发布。

脚本代码

# 替换为你的实际配置
$feedName = "你的ArtifactFeed名称"
$packagePath = "$(Build.ArtifactStagingDirectory)\*.nupkg" # 构建产物中NuGet包的路径
$orgUrl = "$(System.CollectionUri)"
$projectName = "$(System.TeamProject)"

# 遍历构建生成的所有NuGet包
Get-ChildItem -Path $packagePath -Filter *.nupkg | ForEach-Object {
    # 拆分包名与版本号
    $splitName = $_.BaseName.Split('.')
    $packageId = $splitName[0]
    $packageVersion = $_.BaseName.Substring($packageId.Length + 1)

    # 处理预发布版本
    if ($packageVersion.Contains('-')) {
        # 提取不带预发布标签的核心版本(如1.0.0-beta -> 1.0.0)
        $coreVersion = $packageVersion.Split('-')[0]

        # 查询Feed中该包在Release视图下的正式版本
        $existingReleaseVersions = az artifacts nuget list --feed $feedName --name $packageId --org $orgUrl --project $projectName --view Release --query "[?starts_with(version, '$coreVersion.') || version == '$coreVersion'].version" -o tsv

        # 若存在匹配的正式版本,报错终止构建
        if ($existingReleaseVersions) {
            Write-Error "包 $packageId 的预发布版本 $packageVersion 对应的核心版本 $coreVersion 已存在正式Release版本,请递增版本号后重试!"
            exit 1
        } else {
            Write-Host "✅ 验证通过:$packageId 的预发布版本 $packageVersion 符合要求"
        }
    }
    # 可选:校验正式版本是否重复发布
    else {
        $existingVersions = az artifacts nuget list --feed $feedName --name $packageId --org $orgUrl --project $projectName --query "[?version == '$packageVersion'].version" -o tsv
        if ($existingVersions) {
            Write-Error "包 $packageId 的正式版本 $packageVersion 已存在于Artifact Feed中,请勿重复发布!"
            exit 1
        }
    }
}

脚本使用说明

  1. 在构建管道中添加PowerShell任务,将上述代码粘贴进去
  2. 替换脚本中的你的ArtifactFeed名称为实际的Artifact Feed名称
  3. 确保构建服务账号拥有Artifact Feed的读取权限,否则无法查询已发布版本
  4. 微软托管代理默认预装Azure CLI,自托管代理需自行安装Azure CLI

关键注意点

  • 预发布版本通过版本号中的-识别,符合NuGet官方版本规范
  • 脚本使用az artifacts nuget list命令专门查询NuGet包,比通用制品查询命令更精准
  • 若不想直接终止构建,可将Write-Error改为Write-Warning,并移除exit 1

内容的提问来源于stack exchange,提问作者Braydon Wiley

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 16:55:21