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 - 使用参数在 yaml 管道定义中设置路径触发器