Как изменить переменную определения выпуска DevOps Azure из задачи выпуска? - PullRequest
0 голосов
/ 29 октября 2018

Какой самый простой способ заставить ротацию ключей работать для учетных записей хранения Azure из релевантной задачи AzureDevOps? Текущий план состоит в том, чтобы заново сгенерировать старый ключ после выпуска, чтобы сделать его недействительным, и получить новый ключ, который можно использовать при следующем развертывании. Но чтобы это работало, мне кажется, что мне по крайней мере нужно сохранить имя ключа для использования в переменной выпуска.

Я посмотрел задачи журналирования (https://github.com/Microsoft/azure-pipelines-tasks/blob/master/docs/authoring/commands.md),, но это только меняет значение в текущем выпуске и не изменяет определение выпуска.

1 Ответ

0 голосов
/ 30 октября 2018

Вы можете использовать REST API ( Definitions - Update ), чтобы обновить значение переменной определения выпуска из задачи выпуска.

  1. Перейдите к Agent Phase и выберите Allow Scripts to Access OAuth Token. См. Использование токена OAuth для доступа к 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

...