运行号和生成号

Azure DevOps Services |Azure DevOps Server |Azure DevOps Server 2022 |Azure DevOps Server 2020

唯一的运行编号或生成号标识 Azure Pipelines 管道或生成的每个执行。 本文介绍此数字的结构,以及如何对其进行自定义,使其对团队更有用或更有意义。

如果未在 YAML 管道中指定生成名称,或者将 “名称 ”或 “生成号格式” 字段留空在经典管道中,则每次运行都将获得一个唯一的整数作为其名称。 生成名称可以使用其他字符、令牌和变量。 可以使用命名模式、特殊令牌以及预定义或用户定义的变量来自定义运行和生成编号。

内部版本号配置

在经典管道中,可以在管道定义中的选项下自定义生成号格式。 在 YAML 管道中,可以使用 YAML 文件的name级别的属性自定义运行编号格式。 模板或阶段不支持此属性 name

以下示例设置生成生成内部版本号(如 MyProject_MyBuild_main_20240828.1)的自定义运行编号格式。

name: $(TeamProject)_$(Build.DefinitionName)_$(SourceBranchName)_$(Date:yyyyMMdd).$(Rev:r)

steps:
  - script: echo '$(Build.BuildNumber)'

运行次数

Azure Pipelines 运行编号的默认值为 $(Date:yyyyMMdd).$(Rev:r)。 修订 $(Rev:r) 变量仅适用于生成号字段。 生成完成后,如果生成号中的其他任何内容都发生更改,整数 Rev 值将增加一个。

当生成号的任何其他部分发生变化时,$(Rev:r) 重置为 1。 例如,如果将生成号格式配置为 $(Build.DefinitionName)_$(Date:yyyyMMdd).$(Rev:r),则当日期发生变化时,生成号将重置。

如果以前的内部版本号 为 MyBuild_20230621.1,则当天的下一个内部版本号 为 MyBuild_20230621.2。 第二天的第一个内部版本号 为 MyBuild_20230622.1

如果更改版本,也会重置为 < 如果生成格式为 1.0.$(Rev:r) ,并且上一个内部版本号为 1.0.3,如果将版本 1.1.$(Rev:r)更改为,则下一个内部版本号为 1.1.1

以下内部版本号格式生成 2024 年 5 月 6 日第二次运行的名称 Fabrikam_CIBuild_main_20240506.2

name: $(TeamProject)_$(Build.DefinitionName)_$(SourceBranchName)_$(Date:yyyyMMdd).$(Rev:r)

生成号令牌解析如下:

  • 项目名称: Fabrikam
  • 生成定义名称: CIBuild
  • 分支: main
  • 日期:2024 年 5 月 6
  • 当天的运行编号: 2

运行编号令牌

下表显示了如何解析运行编号令牌。 只能使用这些令牌来定义运行号。 它们在管道中的其他任何位置都不起作用。

标记 示例值 备注
$(Build.DefinitionName) CIBuild 生成名称,不能包含无效或空格字符。
$(Build.BuildId) 752 内部不可变 ID,也称为 Run IDAzure DevOps 组织中唯一的 ID。
$(Date:yyyyMMdd) 20240506 日期格式。 还可以指定其他日期格式,例如 $(Date:MMddyy)
$(DayOfMonth) 6
$(DayOfYear) 126
$(Hours) 21
$(Minutes) 7
$(Month) 5
$(Rev:r) 2 当天运行次数中的位置。 使用 $(Rev:r) 确保每个已完成的生成都具有一个唯一名称。
$(Seconds) 3
$(SourceBranchName) main
$(TeamProject) Fabrikam
$(Year:yy) 24
$(Year:yyyy) 2024

重要

如果要在运行号中显示前缀零,可以为 r 令牌添加更多 Rev 字符。 例如,如果希望 $(Rev:rr) 编号以 Rev01 等开头,请指定 02

但是,如果使用零填充 Rev 作为版本号方案的一部分,某些管道任务或常用工具(如 NuGet 包)会删除前导零。 此行为会导致生成生成的项目中的版本号不匹配。

运行数字中的表达式

如果使用表达式来设置运行编号,则无法使用$(Build.BuildId)$(Build.BuildUri)$(Build.BuildNumber)标记,因为它们的值在计算管道表达式时尚未设置。

运行编号中的变量

可以在运行编号中使用预定义变量和用户定义的变量。 例如,如果定义 My.Variable,则可以指定以下数字格式。 前四个变量是预定义的。

$(Build.DefinitionName)_$(Build.DefinitionVersion)_$(Build.RequestedFor)_$(Build.BuildId)_$(My.Variable)

有关预定义变量的详细信息,请参阅 “使用预定义变量”。 有关如何定义用户变量的信息,请参阅 “定义变量”。

FAQ

运行号可以达到多大?可以使用哪些字符?

运行号最多可以包含 255 个字符。 不能使用字符"/\:<>'|?@、或*,并且不能以.结尾。

生成号时间值是用哪个时区表示的?

时区为 UTC。

时区与运行应用程序层服务器的计算机的作系统相同。

如何使用条件动态设置生成号?

可以使用变量作为运行号的一部分。 在下面的示例中,变量 why 设置为运行编号的一部分,其值会根据该 Build.Reason变量而更改。

variables:
  - name: why
    ${{ if eq(variables['Build.Reason'], 'PullRequest') }}:
      value: pr
    ${{ elseif eq(variables['Build.Reason'], 'Manual' ) }}:
      value: manual
    ${{ elseif eq(variables['Build.Reason'], 'IndividualCI' ) }}:
      value: indivci
    ${{ else }}:
      value: other

name: $(TeamProject)_$(SourceBranchName)_$(why)_$(Date:yyyyMMdd).$(Rev:r)

pool:
  vmImage: 'ubuntu-latest'

steps:
- script: echo '$(Build.BuildNumber)'

如何在脚本中引用运行号变量?

可以像脚本中一样 $(Build.BuildNumber) 直接引用运行编号,也可以创建包含该数字的自定义变量。 例如:

# Set MyRunNumber
variables: 
  MyRunNumber: '1.0.0-CI+$(Build.BuildNumber)'

steps:
- script: echo $(MyRunNumber)
- script: echo $(Build.BuildNumber)