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) 编号以 Rev、01 等开头,请指定 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)