Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Azure devops 如何在发布管道中使用build pipeline中的自定义变量_Azure Devops_Azure Pipelines - Fatal编程技术网

Azure devops 如何在发布管道中使用build pipeline中的自定义变量

Azure devops 如何在发布管道中使用build pipeline中的自定义变量,azure-devops,azure-pipelines,Azure Devops,Azure Pipelines,问题: 是否有任何方法可以在azure devops中的构建管道中定义自定义变量,然后以任何方式在发布管道中使用/公开该变量 场景: 我们没有使用变量组,因为我们需要在构建管道中动态设置变量,然后在发布管道中使用它-它不是静态超全局变量 检查了和的文档,但找不到任何帮助信息或提示,这是可能的 我尝试的 在变量中定义变量(在构建管道中),并尝试使用$(名称)在发布管道中访问它,或者检查它是否在环境中 Extras-激励 这背后的动机是 阅读构建管道步骤中使用的最新git标记,并将其公开到管道变量V

问题: 是否有任何方法可以在azure devops中的构建管道中定义自定义变量,然后以任何方式在发布管道中使用/公开该变量

场景: 我们没有使用变量组,因为我们需要在构建管道中动态设置变量,然后在发布管道中使用它-它不是静态超全局变量

检查了和的文档,但找不到任何帮助信息或提示,这是可能的

我尝试的

  • 变量
    中定义
    变量
    (在构建管道中),并尝试使用
    $(名称)
    在发布管道中访问它,或者检查它是否在
    环境中
  • Extras-激励 这背后的动机是

  • 阅读构建管道步骤中使用的最新git标记,并将其公开到管道变量
    VERSION
    (实际上,我们在该过程中会碰到补丁)
  • 发布构建是一个手动步骤
  • 如果发布了一个构建,azure devops gui将向我们显示发布管道的所有变量,这些变量“在发布过程中可设置-这包括我们希望发布此包的版本”
  • 我们希望在这个“版本”中预先填充构建管道的版本,作为下一个版本的建议
  • 在发布管道中,我们签出repo,添加
    版本
    作为标记,并使用该版本打包/发布工件

  • 默认情况下这是不可能的,但您可以使用市场上的2个扩展:

    1) -创建一个变量组,并在生成期间在此任务中动态更新变量。您也可以使用脚本执行此操作,请参阅答案

    2) -在生成期间,将变量保存到与生成资产一起存储的json文件中。在发布期间,加载保存的变量并在发布定义中使用它们

    如何在发布管道中使用build pipeline中的自定义变量

    您可以尝试使用RESTAPI更新发布管道中的默认变量,以使用构建管道中定义的值

    PUT https://vsrm.dev.azure.com/{organization}/{project}/_apis/release/definitions?api-version=5.1
    
    详情:

    构建管道中定义一个自定义变量,如
    TestValue
    ,值为
    123

    还可以使用默认值
    123
    发布管道中定义相同的自定义变量:

    然后添加内联powershell脚本以调用REST API
    定义-Update
    以更新发布管道中的默认值:

    $url = "https://vsrm.dev.azure.com/<OrganizationName>/<ProjectName>/_apis/release/definitions/<DefinitionId>?api-version=5.1"
    
    Write-Host "URL: $url"
    $pipeline = Invoke-RestMethod -Uri $url -Method Get -Headers @{
        Authorization = "Bearer $env:SYSTEM_ACCESSTOKEN"
    }
    Write-Host "Pipeline = $($pipeline | ConvertTo-Json -Depth 100)"
    
    # Update an existing variable named TestValue to its new value 987
    $pipeline.variables.TestValue.value = "$(TestValue)"
    
    ####****************** update the modified object **************************
    $json = @($pipeline) | ConvertTo-Json -Depth 99
    
    
    Write-Host "URL: $json "
    
    $updatedef = Invoke-RestMethod -Uri $url -Method Put -Body $json -ContentType "application/json" -Headers @{Authorization = "Bearer $env:SYSTEM_ACCESSTOKEN"}
    
    write-host "==========================================================" 
    Write-host "The value of Varialbe 'TestValue' is updated to" $updatedef.variables.TestValue.value
    
    $url=”https://vsrm.dev.azure.com///_apis/release/definitions/?api-版本=5.1“
    写入主机“URL:$URL”
    $pipeline=Invoke RestMethod-Uri$url-Method Get-Headers@{
    Authorization=“Bearer$env:SYSTEM\u ACCESSTOKEN”
    }
    写入主机“Pipeline=$($Pipeline | converttojson-Depth 100)”
    #将名为TestValue的现有变量更新为其新值987
    $pipeline.variables.TestValue.value=“$(TestValue)”
    ####******************更新修改的对象**************************
    $json=@($pipeline)|转换为json-深度99
    写入主机“URL:$json”
    $updatedef=Invoke RestMethod-Uri$url-Method Put-Body$json-ContentType“application/json”-Headers@{Authorization=“Bearer$env:SYSTEM_ACCESSTOKEN”}
    写入主机“=============================================================================================================”
    写入主机“Varialbe'TestValue'的值更新为“$updatedef.variables.TestValue.value
    
    在这种情况下,我们可以在对构建管道排队时动态设置变量,该值将覆盖发布管道中的默认值,以便我们可以使用它发布管道

    PUT https://vsrm.dev.azure.com/{organization}/{project}/_apis/release/definitions?api-version=5.1
    

    希望这有帮助。

    这两种情况似乎都有问题,如果您有buildRun1,然后是buildRun2,然后发布buildRun1,那么AFAIU.1)是有问题的-变量的值应该是buildRun2,因为变量组是超全局的,而不是“管道运行”“scoped,right2)是有问题的,因为我们需要变量来扩展发布步骤中的管道变量,它的标志设置为“在发布步骤中可设置”-我们基本上从构建中“预填充”变量,但我们需要它在以后的UI中“可更改”。这意味着,这是“发布管道中的第一个任务”,我们无法真正读取json文件。还有别的办法吗?提示:我更新了我在问题中的动机,以便您了解我们实际上要做的事情1)您是对的,但是如果在发行版中设置一个常规构建变量,您仍然会遇到这个问题,不是吗?我认为管道变量是实例变量,对管道的“运行”有效,并且预期“实例”转入实际排放管道。除此之外,是否可以使用变量组设置“release pipeline variable”,比如将值设置为
    $(mygroup.var)
    ?这听起来很有希望,只是一个需要一般理解的问题。以这种方式设置TestValue——这基本上意味着“下一个版本管道实例化”——不管是哪个版本,对吗?它将基本上更改发布管道变量的全局定义(永远和所有未来版本)。在这种情况下,这是正确的理解吗?尽管这种方法可能有副作用,因为它不尊重可能同时发布的多个版本的可用性(可能有不同的版本上下文),但我认为这仍然是可行的,因为最新的生成将设置最新版本+1,即使我们发布了.an older.job,这也是正确的,它在生成期间保存了“older version”。非常感谢。