如何通过发布任务修改Azure DevOps发布定义变量?

时间:2018-10-29 09:40:04

标签: azure-devops azure-storage azure-pipelines-release-pipeline

从AzureDevOps释放任务使密钥轮换用于Azure存储帐户的最简单方法是什么?当前的计划是在发行后重新生成旧密钥以使其失效,并具有可在下一次部署中使用的新密钥。但是要使其正常工作,看来我至少需要存储要在发布变量中使用的键的名称。

我看过他记录任务(https://github.com/Microsoft/azure-pipelines-tasks/blob/master/docs/authoring/commands.md)的情况,但这仅更改当前发行版中的值,而不会修改发行版定义。

2 个答案:

答案 0 :(得分:2)

您可以使用REST API(Definitions - Update)从发布任务更新发布定义变量的值。

  1. 转到Agent Phase并选择Allow Scripts to Access OAuth Token。参见Use the OAuth token to access the REST API
  2. 批准Project Collection Build Service (xxx)帐户的修改 释放管道许可。 (选择发布管道-> ...-> Security-> Edit release definition设置为Allow
  3. 在发布管道中添加PowerShell任务
  4. 运行内联脚本:(更新以下示例中的变量v1030的值)

    $url = "$($env:SYSTEM_TEAMFOUNDATIONSERVERURI)$env:SYSTEM_TEAMPROJECTID/_apis/Release/definitions/$($env:RELEASE_DEFINITIONID)?api-version=5.0-preview.3"
    Write-Host "URL: $url"
    $pipeline = Invoke-RestMethod -Uri $url -Headers @{
        Authorization = "Bearer $env:SYSTEM_ACCESSTOKEN"
    }
    Write-Host "Pipeline = $($pipeline | ConvertTo-Json -Depth 100)"
    
    # Update an existing variable named v1030 to its new value 1035
    $pipeline.variables.v1030.value = "1035"
    
    ####****************** update the modified object **************************
    $json = @($pipeline) | ConvertTo-Json -Depth 99
    
    
    $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 'v1030' is updated to" $updatedef.variables.v1030.value
    write-host "=========================================================="
    

enter image description here

答案 1 :(得分:1)

这是一个更简洁、更好的解决方案,它还允许同时触发多个构建。 https://tsuyoshiushio.medium.com/how-to-pass-variables-with-pipeline-trigger-in-azure-pipeline-5771c5f18f91

本质上,您的触发构建会产生工件,您的触发构建会读取这些工件并将其转换为变量。

仍然不是很好,但总比没有好,而且比 REST 调用设置静态全局变量组要好。