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

如何在YAML流水线脚本中正确获取$(rev:.r)变量?

问题分析与解决方案

核心原因

$(rev:.r)是Azure DevOps的特殊预定义变量,仅能在流水线的name字段中直接解析,无法在自定义变量(比如你定义的lowerversion)中被正确解析。当你在自定义变量里引用它时,它会被当作原始字符串$(rev:.r)处理,最终导致构建号包含$、:这类Azure DevOps不允许的字符,触发报错。而$(Build.BuildId)是普通预定义变量,在自定义变量中可以正常解析。

解决方案

方案1:直接在name字段中拼接修订号

把$(rev:.r)从自定义变量移到name字段里,利用name字段的特殊解析逻辑处理这个变量:

variables:
- group: NumVersion
- name: upperversion
  ${{ if eq(parameters.VersionBuild,'ReleaseProd') }}:
    value: $(1-VersionMajeur).$(2-VersionMineure-ReleaseProd)
  ${{ if eq(parameters.VersionBuild,'Release') }}:
    value: $(1-VersionMajeur).$(2-VersionMineure-Release)
  ${{ if eq(parameters.VersionBuild,'Develop') }}:
    value: $(1-VersionMajeur).$(2-VersionMineure-Dev)

- name: lowerversion
  ${{ if eq(parameters.TypeBuild,'Feature') }}:
    value: 99.$(Build.BuildId)
  ${{ if eq(parameters.TypeBuild,'Production') }}:
    value: $(3-VersionCorrective-Release)

# 根据TypeBuild参数动态拼接修订号
name: ${{ if eq(parameters.TypeBuild,'Feature') }}$(upperversion).$(lowerversion)
       ${{ else }}$(upperversion).$(lowerversion).$(rev:.r)

stages:
- stage: Build
  jobs:
  - job: Prerequisites
    displayName: Prerequisites
    steps:
    - checkout: self
    # 后续任务中直接用$(Build.BuildNumber)即可获取完整构建号
    - script: |
        echo "完整构建号:$(Build.BuildNumber)"

方案2:用脚本动态生成并更新构建号

如果需要在自定义变量中更灵活地控制版本号,可以用脚本动态生成包含修订号的版本,再通过日志命令更新构建号,同时将版本号存入变量供后续任务使用:

variables:
- group: NumVersion
- name: upperversion
  ${{ if eq(parameters.VersionBuild,'ReleaseProd') }}:
    value: $(1-VersionMajeur).$(2-VersionMineure-ReleaseProd)
  ${{ if eq(parameters.VersionBuild,'Release') }}:
    value: $(1-VersionMajeur).$(2-VersionMineure-Release)
  ${{ if eq(parameters.VersionBuild,'Develop') }}:
    value: $(1-VersionMajeur).$(2-VersionMineure-Dev)

- name: lowerversion
  ${{ if eq(parameters.TypeBuild,'Feature') }}:
    value: 99.$(Build.BuildId)
  ${{ if eq(parameters.TypeBuild,'Production') }}:
    value: $(3-VersionCorrective-Release)

stages:
- stage: Build
  jobs:
  - job: Prerequisites
    displayName: Prerequisites
    steps:
    - checkout: self
    - powershell: |
        # 生成基础版本号
        $fullVersion = "$(upperversion).$(lowerversion)"
        if ("${{ parameters.TypeBuild }}" -eq "Production") {
            # 拼接修订号
            $fullVersion += ".$(rev:.r)"
        }
        # 更新构建号
        Write-Host "##vso[build.updatebuildnumber]$fullVersion"
        # 将版本号存入变量供后续任务使用
        Write-Host "##vso[task.setvariable variable=FullBuildNumber]$fullVersion"
    - script: |
        echo "完整构建号:$(FullBuildNumber)"

关键提示

  • 后续任务中如果需要使用完整构建号,直接引用$(Build.BuildNumber)即可,无需重复生成。
  • $(rev:.r)的生成逻辑由Azure DevOps自动维护,同版本前缀下每次运行流水线时修订号自增,仅在name字段中能被正确解析为数字。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 22:05:17