我遇到的情况如下: 我已经创建了带有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获取整个构建定义,然后将变量值更改后放回去的方法。
还有其他解决方案吗?
答案 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
希望这会有所帮助。