Переменные сборки Azure Devops не обновляются во время сборки - PullRequest
1 голос
/ 07 октября 2019

У меня есть следующая переменная:

Имя: TestVar

Значение: xxx

И следующий скрипт:

$testVar=$env:TestVar.ToLower()

if($testVar-eq 'xxx'){

$testVar= 'updated'

Write-Host "##vso[task.setvariable variable=TestVar;]$testVar"

Значение после прогона остается xxx вместо updated.

Ответы [ 2 ]

1 голос
/ 07 октября 2019

Синтаксис "##vso[task.setvariable variable=TestVar;]$testVar" заключается в обновлении значения переменной только для этой сборки, а не для будущих сборок.

Если вы хотите обновить список переменных сборки, вам нужно обновить определение сборки с помощью Rest API .

Пример сценария PowerShell, который делает это:

$head = @{Authorization = "Bearer $env:SYSTEM_ACCESSTOKEN" }
$url="$(System.TeamFoundationCollectionUri)$(System.TeamProject)/_apis/build/definitions/$(System.DefinitionId)?api-version=5.0"         
$build = Invoke-RestMethod -Uri $url -Method Get -Headers $head -ContentType application/json
$build.variables.TestVar.value = "updated"
$json = $build  | ConvertTo-Json -Depth 10
Invoke-RestMethod -Uri $url -Method Put -Headers $head -Body $json -ContentType application/json
0 голосов
/ 07 октября 2019

Если вы хотите сделать изменение постоянным, вам нужно сделать это через API следующим образом, в противном случае это просто на время выполнения

$projecturi = "$env:SYSTEM_TEAMFOUNDATIONCOLLECTIONURI"
$project = "$env:SYSTEM_TEAMPROJECT"
$accessToken = $env:SYSTEM_ACCESSTOKEN
$buildID = "$env:BUILD_BUILDID"

$headers = @{ "Authorization" = "Bearer $accessToken" }

$buildurl= $projecturi + $project + "/_apis/build/builds/" + $buildID + "?api-version=2.0"

Write-Host $buildurl

$getbuild = Invoke-RestMethod -Uri $buildurl -headers $headers -Method Get |select definition

Write-Host $getbuild

$definitionid = $getbuild.definition.id

Write-Host $definitionid

$defurl = $projecturi + $project + "/_apis/build/definitions/" + $definitionid + "?api-version=2.0"

$definition = (Invoke-WebRequest $defurl -Headers $headers -Method GET -ContentType "application/json" -UseBasicParsing).Content | ConvertFrom-Json

$definition.variables.testvar.value = "Updated"

$json = @($definition) | ConvertTo-Json  -Depth 100


Try{
  $result = (Invoke-WebRequest $defurl -Method "Put" -Headers $headers -ContentType "application/json" -Body $json -UseBasicParsing).Content | ConvertFrom-Json
}
Catch{
  $errorMessage = $_.Exception.Message
  $errorDetail = $_
  $message = @"
$errorMessage
$errorDetail
"@

  Write-Error $message -ErrorAction Continue
  return 0
}
...