Azure DevOps 在构建任务中设置内部版本号变量

Posted

技术标签:

【中文标题】Azure DevOps 在构建任务中设置内部版本号变量【英文标题】:Azure DevOps Set Build number variable in a Build Task 【发布时间】:2020-02-05 17:26:29 【问题描述】:

在 Azure DevOps 中,我创建了一个 Build。在那个构建中,我创建了一个在排队时可设置的 ProjectBuildNumber 管道变量。然后在选项 -> 内部版本号格式下使用该变量来设置我在 Azure 中显示的内部版本号。

但是,我正在尝试在我正在构建/部署的代码中设置 ProjectBuildNumber 变量。有没有办法让我的 Build 中有一个 Task 来更新 ProjectBuildNumber 并更新 Azure DevOps 中的 Build 号?

【问题讨论】:

【参考方案1】:

有没有办法让我的 Build 中有一个 Task 来更新 ProjectBuildNumber 并更新 Azure DevOps 中的 Build 号?

答案是是的

您可以在构建定义中添加一个Inline Power-Shell 任务来更新ProjectBuildNumber 的值,然后根据它更新构建号:

Write-Host "##vso[task.setvariable variable=ProjectBuildNumber;]YourUpdateValue"

Write-Host "##vso[build.updatebuildnumber]xxx.$(ProjectBuildNumber).xxx.xxx"

在构建过程中查看Logging Command 了解更多详细信息:

此外,如果您想在 UI/web 门户上更新管道变量的值,您需要 REST API (Definitions - Update) 来更新来自构建任务的构建管道定义变量的值。

有一个很相似的帖子,详情可以查看答案:

How to modify Azure DevOps release definition variable from a release task?

注意:将 API 更改为构建定义:

PUT https://dev.azure.com/organization/project/_apis/build/definitions/definitionId?api-version=5.0

希望这会有所帮助。

【讨论】:

【参考方案2】:

我们可以通过两种方式更新 Azure Devops 中的内部版本号。 一个来自选项部分/选项卡和第二个通过 PowerShell 脚本。

要从 Power shell 脚本更新内部版本号.. 我们需要添加以下脚本..

Write-Host "##vso[build.updatebuildnumber]$(VersionNumber).$(VersionRevision)"

这里我们使用了 2 个变量:VersionNumber 和 VersionRevision。 我们需要在 PipeLine Configurations 中添加 2 个变量。 VersionNumber 将是所需的数字,而 VersionRevision 是每次我们将创建新构建时都会更新的计数器编号。 请查看 You Tube 视频中的完整演示

https://youtu.be/WBmFTmzopiQ

【讨论】:

【参考方案3】:

已为此创建了 power shell 任务

# replace existing Build.BuildNumber with
# NAME_2.1.2.54_20211220.16_345
- task: PowerShell@2
  displayName: 'Update Version Number'
  inputs:
    targetType: 'inline'
    script: | 
      $lines = Get-ChildItem ".\Project\My Project\AssemblyInfo.vb" 
      $match = $lines | Select-String -Pattern "\<Assembly\:\s+AssemblyVersion\(""(\d+\.\d+\.\d+\.\d+)""\)\>"
      $version = $match.Matches[0].Groups[1].Value
      [Version]::Parse($version) # validate
      $tag = "NAME_$($version)_$(Build.BuildNumber)_$(Build.BuildId)"
      Write-Host "##vso[build.updatebuildnumber]$tag"

【讨论】:

【参考方案4】:

查看 Microsoft 文档:Variables

根据您的操作系统,您可以添加 Powershell/Batch/Bash 任务并更改变量。

编辑:经过一些研究,变量的变化似乎会出现在以下任务中。看看这个问题Update environment variables using task.setvariable in a bash script does not work

【讨论】:

我试过了,但似乎没有设置管道变量。

以上是关于Azure DevOps 在构建任务中设置内部版本号变量的主要内容,如果未能解决你的问题,请参考以下文章

Azure Devops构建SSIS任务

如何在 Azure devops 中设置构建管道 [关闭]

在 Azure 管道中设置 conda 元数据的内部版本号

Azure DevOps - 使用参数在 yaml 管道定义中设置路径触发器

如何在 Azure DevOps yaml 管道中设置 ENVIRONMENT 状态

我可以在 Azure DevOps 中设置默认安全和/或分支策略吗?