2

在 yaml 构建中,是否可以使用表达式设置构建名称;如果我可以将发布管道与实际的构建 ID 匹配,那将是有利的。

例子:

trigger:  
- master

variables:  
    major: 2  
    minor: 3  
    offset: 2000  
    bid: $[$build.BuildID -as [int] + $offset]

name: "$(major).$(minor).$(bid)"

4

4 回答 4

10

您可以使用UpdateBuildNumber 命令将名称动态设置为 bash 或 PowerShell 脚本的一部分。

有关更多详细信息,您可以查看此博客文章,但它的要点是这样的:

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"
于 2020-04-17T05:21:20.410 回答
3

还有另一种方法可以在不使用脚本的情况下设置内部版本号。这种方法的优点是构建名称是从一开始就设置的,不像在构建过程中更改原始名称的脚本。并且序列号生成更清晰(请参阅仅在管道的“名称”属性中起作用的 $(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 参考

于 2020-08-28T21:18:19.540 回答
0

如果您希望使用生成的表达式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,然后在该两周内为每个后续版本自动增加。

于 2022-02-15T20:56:47.623 回答
0

该示例不适用于语法错误。

您可以检查 MSDN doc Expressions并且没有提供像求和这样的数学运算。

更好的解决方法是退出偏移:

variables:
  solution: '**/*.sln'
  buildPlatform: 'Any CPU'
  buildConfiguration: 'Release'
  major: 2  
  minor: 3  
  #offset: 2000  

name: $(major).$(minor).$(build.BuildID)

例如,这将返回您的名称2.3.101

于 2020-01-18T03:26:34.127 回答