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

Я работаю над CI и CD Azure Devops.Здесь мое имя выпуска должно быть в номере версии с использованием тегов.Я получаю это с помощью групп переменных, добавляя теги и значения к нему.Здесь я получаю значение тегов как постоянное, как статическое, для каждого выпуска, например 1.1,1.2,1.3 и т. Д.

Теперь я пытаюсь динамически увеличивать / обновлять значение моего тега для каждого нового выпуска, запускаемого после завершения определения сборки.успешно, что выглядит как 1.1,1.2,2.1,2.2,3.1,3.2 и т. д. Это возможно с помощью статически по группам переменных, но вручную нам нужно обновить его.

Можно ли увеличить / обновитьзначение тегов в группе переменных с заданиями определения сборки или другим процессом. Если возможно, предложите мне «Как это сделать?»

Ответы [ 2 ]

0 голосов
/ 01 августа 2019

Я использовал эту задачу, чтобы обновить значение моих переменных внутри моей группы.

Средство обновления общих переменных (предварительный просмотр)

Не забудьте установить эти настройки:

  1. Требуется «Разрешить сценариям доступ к токену OAuth» в дополнительном параметре задания агента

  2. Установить роль администратора «Служба сборки коллекции проектов» вгруппа переменных.

0 голосов
/ 20 сентября 2018

Вы можете перезаписать / обновить значение переменных, используя команду ведения журнала , чтобы снова установить переменные в Azure Devops Build::

Write-Host "##vso[task.setvariable variable=testvar;]testvalue"

Чтобы динамически увеличить значение,вам нужно использовать токен $(Rev:.r).Вы можете настроить переменные на основе $(Build.BuildNumber) или $(Release.ReleaseName), так как они будут динамически увеличивать значение ...

Просто обратитесь к этой теме, чтобы настроить переменные: https://github.com/MicrosoftDocs/vsts-docs/issues/666#issuecomment-386769445


ОБНОВЛЕНИЕ:

Если вы просто хотите обновить значение переменных, определенных в конкретной группе переменных, то вы можете вызвать REST API в конвейере сборки для достижения этого:

PUT https://{account}.visualstudio.com/{ProjectName or ID}/_apis/distributedtask/variablegroups/{Variable Group ID}?api-version=5.0-preview.1

Content-Type: application/json

Request Body:

{"id":2,"type":"Vsts","name":"VG0926","variables":{"TEST0926":{"isSecret":false,"value":"0930"}}}

enter image description here


ОБНОВЛЕНИЕ2:

Вы можете написать сценарий PowerShell для вызова API RESTзатем добавьте задачу PowerShell для запуска сценария в конвейере сборки: ( Используйте токен OAuth для доступа к REST API )

Ниже пример для справки:

$url = "$($env:SYSTEM_TEAMFOUNDATIONCOLLECTIONURI)$env:SYSTEM_TEAMPROJECTID/_apis/distributedtask/variablegroups/{Variable Group ID}?api-version=5.0-preview.1"
Write-Host $url

function CreateJsonBody
{

    $value = @"

{"id":2,"type":"Vsts","name":"VG0926","variables":{"TEST0926":{"isSecret":false,"value":"0930"}}}

"@

 return $value
}

$json = CreateJsonBody


$pipeline = Invoke-RestMethod -Uri $url -Method Put -Body $json -ContentType "application/json" -Headers @{
    Authorization = "Bearer $env:SYSTEM_ACCESSTOKEN"
}

Write-Host "New Variable Value:" $pipeline.variables.TEST0926.value

ОБНОВЛЕНИЕ3:

Что ж, еще раз проверил, ниже сценарии также работают для меня.Вы можете попробовать, просто замените параметры соответственно:

# Base64-encodes the Personal Access Token (PAT) appropriately
$base64AuthInfo = [Convert]::ToBase64String([Text.Encoding]::ASCII.GetBytes(("{0}:{1}" -f "","PAT here")))
$url = "https://dev.azure.com/xxx/Test0924/_apis/distributedtask/variablegroups/1?api-version=5.0-preview.1"

$json = '{"id":1,"type":"Vsts","name":"VG0928","variables":{"TEST0928":{"isSecret":false,"value":"0931"}}}'
$pipeline = Invoke-RestMethod -Uri $url -Method Put -Body $json -ContentType "application/json" -Headers @{Authorization=("Basic {0}" -f $base64AuthInfo)}
Write-Host "New Variable Value:" $pipeline.variables.TEST0928.value 
...