问题描述
我正在我的yaml管道中寻找一个简单的步骤,以便每次任务成功运行时,将运行版本号加1。然后,我想将其解析为外部,例如版本:#{version}# 然后,我将使用replace令牌进行选择并更新管道中的变量。
解决方法
每次使用yaml时,您都可以使用纪元时间,即唯一的时间戳来生成唯一的版本。
,您可以检查counter
功能(https://docs.microsoft.com/en-us/azure/devops/pipelines/process/expressions?view=azure-devops#counter)。
例如,通过添加以下代码,我可以在产品名称之前添加产品版本(并在每次运行时将其递增):
name: $(Major).$(Minor).$(Fix)
variables:
Major: 2
Minor: 0
Fix: $[counter(variables['Major'].variables['Minor'],0)]
steps:
- step: ...
每次运行构建时,结果都会增加+1。您可以在管道中将其打印出来,或将其用作任务的参数。
,您可以考虑将unique run version value
存储在Variable Group中。这样我们就可以在多个pipelines/jobs/steps
中使用此唯一值。
1。创建一个变量组并定义version
变量。
2。管理其安全性并添加ProjectName Build Service
作为管理员角色,保存更改。
3。然后我们可以添加一个PS任务来更新version
的值。
- task: PowerShell@2
inputs:
targetType: 'inline'
script: |
$url = "$($env:SYSTEM_TEAMFOUNDATIONCOLLECTIONURI)$env:SYSTEM_TEAMPROJECTID/_apis/distributedtask/variablegroups/{YourVariableGroupID}?api-version=6.0-preview.2"
$linkedVariableGroup = Invoke-RestMethod -Uri $url -Headers @{Authorization = "Bearer $env:SYSTEM_ACCESSTOKEN"}
$versionNumber = [int]$linkedVariableGroup.variables.version.value
$versionNumber+=1
$linkedVariableGroup.variables.version.value=$versionNumber
$json = $linkedVariableGroup | ConvertTo-Json -Depth 100
Invoke-RestMethod -Method PUT -Uri $url -ContentType "application/json" -Headers @{Authorization = "Bearer $env:SYSTEM_ACCESSTOKEN"} -Body $json
env:
SYSTEM_ACCESSTOKEN: $(System.AccessToken)
在管道的末尾添加此步骤,以便每次管道成功运行时,此任务都会向version
变量添加1。您应该在上述脚本中以自己的{YourVariableGroupID}
回复VariableGroupID
。