Devops YAML - 使用表达式设置构建名称
Devops YAML - set build name using expression
在 yaml 构建中,是否可以使用表达式设置构建名称;如果我可以将发布管道与实际构建 ID 匹配,那将是有利的。
示例:
trigger:
- master
variables:
major: 2
minor: 3
offset: 2000
bid: $[$build.BuildID -as [int] + $offset]
name: "$(major).$(minor).$(bid)"
该示例因语法错误而无法运行。
您可以查看 MSDN 文档 Expressions 并且没有提供求和之类的数学运算。
更好的解决方法是退出偏移量:
variables:
solution: '**/*.sln'
buildPlatform: 'Any CPU'
buildConfiguration: 'Release'
major: 2
minor: 3
#offset: 2000
name: $(major).$(minor).$(build.BuildID)
这将 return 你的名字,例如 2.3.101
。
您可以使用 UpdateBuildNumber command 将名称动态设置为 bash 或 PowerShell 脚本的一部分。
更多细节你可以看this blog post,但它的要点是这样的:
name: 'Set dynamically below in a task'
variables:
major: 2
minor: 3
offset: 2000
steps:
- task: PowerShell@2
displayName: Set the name of the build (i.e. the Build.BuildNumber)
inputs:
targetType: 'inline'
script: |
[int] $buildIdWithOffset = ([int] $(Build.BuildId)) + ([int] $(offset))
[string] $buildName = "$(major).$(minor).$buildIdWithOffset"
Write-Host "Setting the name of the build to '$buildName'."
Write-Host "##vso[build.updatebuildnumber]$buildName"
还有另一种不使用脚本设置内部版本号的方法。这种方法的优点是构建名称是从一开始就设置的,不像脚本在构建过程中更改原始名称。并且序列号生成更清晰(请参阅仅在管道的“名称”属性 中起作用的 $(Rev:r) 部分。
您必须使用“格式”表达式而不是 ($Variable) 语法,因为构建名称是在编译阶段创建的,此时 $(Variable) 语法尚不可用。否则,变量将不会被评估,并将作为 $(Variable).
进入构建名称
name: '$(buildNumber).$(Rev:r)'
variables:
majorVersion: '1'
minorVersion: '0'
${{ if eq(variables['Build.SourceBranch'], 'refs/heads/master') }}:
buildNumber: ${{ format('{0}.{1}', variables['majorVersion'], variables['minorVersion']) }}
${{ if eq(variables['Build.Reason'], 'PullRequest') }}:
buildNumber: ${{ format('{0}.{1}.PR-{0}', variables['majorVersion'], variables['minorVersion'], variables['System.PullRequest.PullRequestId']) }}
这里有更多关于表达式的信息:Azure Pipelines Reference
如果您希望使用生成的表达式为每个唯一值自动递增 counter
函数(只能用作变量声明的一部分),您可以使用以下方法:
jobs:
- job: VERSION_BUILD
displayName: Version Build
variables:
- name: pipeline_start_date
value: $[format('{0:yyyy}-{0:MM}-{0:dd}', pipeline.startTime)]
steps:
- checkout: none
- task: PowerShell@2
name: generate_minor_version
displayName: Generate Minor Version
inputs:
targetType: 'inline'
script: |
Write-Host "Pipeline start date is '$(pipeline_start_date)'."
[int] $minorVersion = [math]::floor(((New-TimeSpan -Start '2022-02-01' -End '$(pipeline_start_date)').Days) / 14) + 1
Write-Host "Minor version is '$minorVersion'."
Write-Host "##vso[task.setvariable variable=minor_version;isOutput=true;]$minorVersion"
- job: VERSION_BUILD_2
displayName: Version Build 2
dependsOn:
- VERSION_BUILD
variables:
- name: minor_version
value: $[dependencies.VERSION_BUILD.outputs['generate_minor_version.minor_version']]
- name: major_minor_version
value: $[format('{0}.{1}', variables['major_version'], variables['minor_version'])]
- name: build_version
value: $[counter(variables['major_minor_version'], 0)]
steps:
- checkout: none
- task: PowerShell@2
displayName: Update Build Number
inputs:
targetType: 'inline'
script: |
Write-Host "Major-minor version is '$(major_minor_version)'."
Write-Host "Build version is '$(build_version)'."
[string] $buildNumber = "$(major_version).$(minor_version).$(build_version)"
Write-Host "Setting the name of the build to '$buildNumber'."
Write-Host "##vso[build.updatebuildnumber]$buildNumber"
此特定脚本将 $minor_version
计算为从给定时间点开始的 2 周间隔(迭代)的数量。因此理论上,每隔一个星期二,管道会将内部版本号的次要版本增加 1,并将内部版本号的内部版本重置为 0,然后将自动为该 two-week 中的每个后续版本递增期间。
在 yaml 构建中,是否可以使用表达式设置构建名称;如果我可以将发布管道与实际构建 ID 匹配,那将是有利的。
示例:
trigger:
- master
variables:
major: 2
minor: 3
offset: 2000
bid: $[$build.BuildID -as [int] + $offset]
name: "$(major).$(minor).$(bid)"
该示例因语法错误而无法运行。
您可以查看 MSDN 文档 Expressions 并且没有提供求和之类的数学运算。
更好的解决方法是退出偏移量:
variables:
solution: '**/*.sln'
buildPlatform: 'Any CPU'
buildConfiguration: 'Release'
major: 2
minor: 3
#offset: 2000
name: $(major).$(minor).$(build.BuildID)
这将 return 你的名字,例如 2.3.101
。
您可以使用 UpdateBuildNumber command 将名称动态设置为 bash 或 PowerShell 脚本的一部分。
更多细节你可以看this blog post,但它的要点是这样的:
name: 'Set dynamically below in a task'
variables:
major: 2
minor: 3
offset: 2000
steps:
- task: PowerShell@2
displayName: Set the name of the build (i.e. the Build.BuildNumber)
inputs:
targetType: 'inline'
script: |
[int] $buildIdWithOffset = ([int] $(Build.BuildId)) + ([int] $(offset))
[string] $buildName = "$(major).$(minor).$buildIdWithOffset"
Write-Host "Setting the name of the build to '$buildName'."
Write-Host "##vso[build.updatebuildnumber]$buildName"
还有另一种不使用脚本设置内部版本号的方法。这种方法的优点是构建名称是从一开始就设置的,不像脚本在构建过程中更改原始名称。并且序列号生成更清晰(请参阅仅在管道的“名称”属性 中起作用的 $(Rev:r) 部分。
您必须使用“格式”表达式而不是 ($Variable) 语法,因为构建名称是在编译阶段创建的,此时 $(Variable) 语法尚不可用。否则,变量将不会被评估,并将作为 $(Variable).
进入构建名称name: '$(buildNumber).$(Rev:r)'
variables:
majorVersion: '1'
minorVersion: '0'
${{ if eq(variables['Build.SourceBranch'], 'refs/heads/master') }}:
buildNumber: ${{ format('{0}.{1}', variables['majorVersion'], variables['minorVersion']) }}
${{ if eq(variables['Build.Reason'], 'PullRequest') }}:
buildNumber: ${{ format('{0}.{1}.PR-{0}', variables['majorVersion'], variables['minorVersion'], variables['System.PullRequest.PullRequestId']) }}
这里有更多关于表达式的信息:Azure Pipelines Reference
如果您希望使用生成的表达式为每个唯一值自动递增 counter
函数(只能用作变量声明的一部分),您可以使用以下方法:
jobs:
- job: VERSION_BUILD
displayName: Version Build
variables:
- name: pipeline_start_date
value: $[format('{0:yyyy}-{0:MM}-{0:dd}', pipeline.startTime)]
steps:
- checkout: none
- task: PowerShell@2
name: generate_minor_version
displayName: Generate Minor Version
inputs:
targetType: 'inline'
script: |
Write-Host "Pipeline start date is '$(pipeline_start_date)'."
[int] $minorVersion = [math]::floor(((New-TimeSpan -Start '2022-02-01' -End '$(pipeline_start_date)').Days) / 14) + 1
Write-Host "Minor version is '$minorVersion'."
Write-Host "##vso[task.setvariable variable=minor_version;isOutput=true;]$minorVersion"
- job: VERSION_BUILD_2
displayName: Version Build 2
dependsOn:
- VERSION_BUILD
variables:
- name: minor_version
value: $[dependencies.VERSION_BUILD.outputs['generate_minor_version.minor_version']]
- name: major_minor_version
value: $[format('{0}.{1}', variables['major_version'], variables['minor_version'])]
- name: build_version
value: $[counter(variables['major_minor_version'], 0)]
steps:
- checkout: none
- task: PowerShell@2
displayName: Update Build Number
inputs:
targetType: 'inline'
script: |
Write-Host "Major-minor version is '$(major_minor_version)'."
Write-Host "Build version is '$(build_version)'."
[string] $buildNumber = "$(major_version).$(minor_version).$(build_version)"
Write-Host "Setting the name of the build to '$buildNumber'."
Write-Host "##vso[build.updatebuildnumber]$buildNumber"
此特定脚本将 $minor_version
计算为从给定时间点开始的 2 周间隔(迭代)的数量。因此理论上,每隔一个星期二,管道会将内部版本号的次要版本增加 1,并将内部版本号的内部版本重置为 0,然后将自动为该 two-week 中的每个后续版本递增期间。