【问题标题】:How to set build name (Build.BuildNumber) in an Azure DevOps Build Pipeline template?如何在 Azure DevOps 构建管道模板中设置构建名称 (Build.BuildNumber)?
【发布时间】:2020-01-10 15:06:13
【问题描述】:

我需要创建几个构建定义,它们都将执行完全相同的步骤。基本上,变化只是触发器和一些参数。因此,我将它们全部基于一个完成所有繁重工作的模板。效果很好。

但是,出于几个原因,我需要自定义$(Build.BuildNumber) 的值,一些美观,一些实用。根据Configure run or build numbers,我所要做的就是在 YAML 定义中设置name 属性。

我所有的定义都应该有相同的名称格式,所以我想直接在模板中定义它。但是在模板中设置顶级name 属性会导致错误消息:

/templates/default-build.yml (Line: 5, Col: 1): Unexpected value 'name'

在各个定义中设置属性按预期工作,但不会作为解决方案“扩展”。

各个定义如下所示:

trigger:
- master

extends:
  template: ../templates/default-build.yml
  parameters:
    solution: '**/ASolution.sln'

模板如下所示:

parameters:
- name: solution
  type: string
  default: ''

name: $(Build.DefinitionName)_$(Date:yyyyMMdd)$(Rev:.r)  # Trying to set Build.BuildNumber

variables:
  solution: ${{ parameters.solution }}
  buildPlatform: 'Any CPU'
  buildConfiguration: 'Release'

stages:
- stage: build_solution
  jobs:
    - job:
      steps:
        - task: VSBuild@1
          displayName: 'Build solution $(solution)'
          inputs:
            solution: $(solution)
            platform: '$(BuildPlatform)'
            configuration: '$(BuildConfiguration)'

        - task: PublishBuildArtifacts@1
          displayName: 'Publish Artifact'
          inputs:
            PathtoPublish: '$(build.artifactstagingdirectory)'
            ArtifactName: '$(Build.BuildNumber)'

我错过了什么吗?还是(当前)不支持在模板中设置此特定属性?

【问题讨论】:

  • 我现在没有答案,但您能解释一下为什么放置 name: 属性不能扩展吗?如果您尝试将 name: 放入模板中,您是否期望 $(Build.Definition) 值不同?构建定义的名称由管道的名称定义,因此无论如何,如果您在主 yaml 中有它,运行构建的管道将具有相同的名称。
  • @AnthonyKlotz 它不会“缩放”,因为我将有几十个继承模板的定义,而“任何人”都可以创建新定义。我想确保新的将使用相同的name 定义(我为示例进行了简化),并且对格式的任何更改都会自动应用到任何地方。基本上,限制任何人为错误的机会。
  • @madd0 进展如何? 4c74356b41 的回答对您有帮助吗?或者,如果您有任何疑虑,请随时在此处分享。
  • $(Rev:.r) 对我来说似乎很奇怪。我建议删除点并写$(Rev:r)。见文章Configure run or build numbers
  • $(Rev:.r) 在该页面上的多个示例中使用@Beauty,我向 ms 询问了clarification

标签: azure-devops azure-pipelines


【解决方案1】:

我认为不支持为此使用模板,因为name 是顶级参数,模板内的所有内容都不是顶级的。

https://docs.microsoft.com/en-us/azure/devops/pipelines/yaml-schema?view=azure-devops&tabs=schema#pipeline

【讨论】:

  • 我明白你的意思,但文档会让我不相信。例如:如果模板用于包含内容,它的功能类似于许多编程语言中的包含指令。 docs.microsoft.com/en-us/azure/devops/pipelines/process/…。我知道模板引用必须是“类型”,但文档并不清楚扩展模板是否具有相同的限制(或 any 限制)。 (此外,引用实际回答问题的链接的摘录是一种很好的回答习惯;))cc @hugh-lin-msft
【解决方案2】:

您可以在调用 ##vso[build.updatebuildnumber]“命令”的 Powershell 任务中执行此操作。

https://docs.microsoft.com/en-us/azure/devops/pipelines/scripts/logging-commands?view=azure-devops&tabs=bash#updatebuildnumber-override-the-automatically-generated-build-number

任务也可以像这样定义为模板:

steps:

- task: PowerShell@2
  displayName: 'Create version number'
  name: 'CreateVersionNumber'
  inputs:
    targetType: 'inline'
    script: |
        $newVersion = "MyVersion $(Build.BuildId)"

        Write-Host "New version is $($newVersion)"

        [string] $buildName = "$($newVersion)"
        Write-Host "Setting the name of the build to '$buildName'."
        Write-Host "##vso[build.updatebuildnumber]$buildName"

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-01-18
    • 1970-01-01
    • 2021-01-21
    • 2022-01-19
    • 1970-01-01
    • 2022-11-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多