Установка переменной конвейера выпуска Azure DevOps с помощью REST API

Я могу обновить переменную в конвейере сборки, используя приведенное ниже тело json

        $body = '
{ 
    "definition": {
        "id": 25
    },
    "parameters": "{\"var\":\"value\"}"

}
'

Тот же json не работает с конвейером выпуска. Есть ли способ передать переменную таким же образом через конвейер выпуска




Ответы (1)


Установка переменной конвейера выпуска Azure DevOps с помощью REST API

Мы могли бы использовать REST API Definitions - Get, чтобы получить всю информацию об этом определении в теле, затем мы могли бы обновить тело и использовать (Definitions - Update), чтобы обновить значение переменной определения выпуска. из выпускного конвейера:

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

Ниже приведены мои тестовые встроенные скрипты PowerShell:

$url = "https://vsrm.dev.azure.com/{organization}/{project}/_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 TestVar to its new value 2
$pipeline.variables.TestVar.value = "789"

####****************** 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 'TestVar' is updated to" $updatedef.variables.TestVar.value

В результате теста переменная TestVar обновилась до 789:

введите описание изображения здесь

Обновление:

Но я хочу добиться этого без обновления \ изменения определения

Ответ положительный. Вы можете использовать Релизы - Создать с телом запроса:

{
  "definitionId": Id,
  "environments": [
    {
      "variables": {
        "TestVar": {
          "value": "xxxx"
        },
        "TestVar2": {
          "value": "xxxx"
        }
      },

    }
   ],
}

Для получения дополнительной информации см. сообщение здесь .

Надеюсь это поможет.

person Leo Liu-MSFT    schedule 10.12.2019
comment
Но я хочу добиться этого без обновления \ изменения определения - person tjdoubts; 10.12.2019
comment
@tjdoubts, это совершенно другой вопрос, вы вообще не упомянули об этом в своем исходном вопросе, проверьте мой обновленный ответ. - person Leo Liu-MSFT; 10.12.2019
comment
@ LeoLiu-MSFT, это здорово. Отлично работает! Но почему сборки, которые обертывают REST API, имеют так много ограничений? Например. для манипуляций с переменными (причина, почему я здесь!). В любом случае, благодарю Вас. - person gsscoder; 12.06.2020
comment
@ LeoLiu-MSFT обновите свой вопрос и удалите нерелевантную часть вопроса или, по крайней мере, измените порядок. В этом было бы намного больше смысла - person Eugen Mayer; 29.12.2020