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

问题描述 投票:3回答:2

我的情况如下:我创建了一个带有Pipeline变量的Azure DevOps管道,比方说'变量A'。 '变量A'的值为1.在构建期间,我将'变量A'的值更改为2。

当构建第二次运行时,我想要这些'变量A'的值,但这又回到了1,但是我希望值为2,因为在之前的构建中我将'变量A'的值设置为2。

这些是我尝试过的方法没有成功:

方法1:

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

方法2:

$env:A = 2

唯一可行的但我不认为这是要走的路是通过其余的api得到整个构建定义,然后将变量的值改回来。

这个问题还有其他解决办法吗?

azure variables azure-devops pipeline devops
2个回答
0
投票

如果您专门查看越来越多的数字,那么您也可以使用计数器。这些只是基于YAML的构建定义中的woork。

格式如下:

您可以使用任何受支持的表达式来设置变量。下面是一个设置变量作为计数器的示例,该计数器从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来更新整个定义会起作用,尽管很难解决有关并行性的所有可能性。


0
投票

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

我担心你必须使用其余的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

希望这可以帮助。

© www.soinside.com 2019 - 2024. All rights reserved.