【问题标题】:How to change pipeline variables for usage in the next build in Azure DevOps如何更改管道变量以在 Azure DevOps 的下一个构建中使用
【发布时间】:2019-09-08 16:42:35
【问题描述】:

我的情况如下: 我创建了一个带有管道变量的 Azure DevOps 管道,比如说“变量 A”。 “变量 A”的值为 1。在构建过程中,我将“变量 A”的值更改为 2。

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

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

方法一:

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

方法二:

$env:A = 2

唯一可行但我不认为这是可行的方法是通过其余 api 获取整个构建定义并将其放回并更改变量的值。

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

【问题讨论】:

    标签: azure variables azure-devops azure-pipelines devops


    【解决方案1】:

    如果您特别关注的是不断增加的数字,那么您也可以使用计数器。这些仅适用于基于 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 来更新整个定义是可行的,尽管很难解决所有关于并行性的可能性。

    【讨论】:

    • 不是计数器我想用这个,而是一个版本,检查以前构建的c#项目的版本是否高于当前构建。但似乎我需要为此使用 REST api。
    • 或者您可以使用 BuildNumber 变量作为前导。它将不断升级,您可以将其注入 AssemblyVersion 等,而不是使代码在这方面领先。如果没有,要么使用 REST API 获取当前值,要么您可以通过 gittf 挖掘代码的历史记录,以仅比较实际的代码文件。
    【解决方案2】:

    如何更改管道变量以便在 Azure DevOps 的下一个构建中使用

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

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

    当你再次使用执行构建时,它仍然会从管道变量值中拉取值。

    因此,我们必须在门户网站上更新该变量的值。然后我们需要使用需要的 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
    

    希望这会有所帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-10-27
      • 1970-01-01
      • 2021-01-21
      • 1970-01-01
      • 2021-05-02
      • 1970-01-01
      • 1970-01-01
      • 2022-10-14
      相关资源
      最近更新 更多