如何在Azure DevOps的下一个版本中更改管道变量以供使用

时间:2019-04-18 10:47:01

标签: azure variables azure-devops pipeline devops

我遇到的情况如下: 我已经创建了带有Pipeline变量的Azure DevOps Pipeline,我们将其称为“变量A”。 “变量A”的值为1。在构建过程中,我将“变量A”的值更改为2。

当构建第二次运行时,我想要这些“变量A”的值,但它是1,但是我希望该值是2,因为在上一个构建中,我将“变量A”的值设置为2

这些是我尝试失败的方法:

方法1:

Write-Host "##vso[task.setvariable variable=A;]2"

方法2:

$env:A = 2

唯一可行的方法,但我不认为这是要通过剩下的api获取整个构建定义,然后将变量值更改后放回去的方法。

还有其他解决方案吗?

2 个答案:

答案 0 :(得分:0)

如果您正在特别关注数量的增加,那么您也可以使用计数器。这些仅在基于YAML的构建定义中吸引。

格式如下:

您可以使用任何受支持的表达式来设置变量。这是一个设置变量以用作计数器的示例,该变量从100开始,每次运行递增1,然后每天重置为100。

yaml

jobs:
- job:
  variables:
    a: $[counter(format('{0:yyyyMMdd}', pipeline.startTime), 100)]
  steps:
    - bash: echo $(a)

有关计数器和其他表达式的更多信息,see expressions

计数器是为管道存储的,并且基于您在counterr表达式中提供的前缀。上面的表达式使用yyyymmdd来生成每天都是唯一的前缀。


对于UI驱动的构建定义,确实确实可以使用REST API来更新整个定义,尽管要解决涉及并行性的所有可能性确实很困难。

答案 1 :(得分:0)

  

如何更改管道变量以在Azure DevOps的下一个版本中使用

恐怕您必须使用rest api来更改该管道变量的值。

那是因为当您使用脚本“ ## vso [task.setvariable variable = testvar;] testvalue”覆盖它时,覆盖值仅适用于当前的构建管道

再次使用执行构建时,它仍将从管道变量值中提取值。

因此,我们必须在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

希望这会有所帮助。