我的yaml管道文件中需要一个步骤/任务,它将创建一个唯一的运行版本值

问题描述

我正在我的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变量。

enter image description here

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