输出值未正确存储。
当您使用以下语法时,az storage account keys list --account-name "$(diagnosticsStorageAccountName)" --resource-group "$(resourceGroup)" 的输出会分布在多行中:
echo "##vso[task.setvariable variable=testvar;]%myvar%"
所以其中一个问题是只有 JSON 数组的第一行被存储到变量中。
我通过以下方式解决了这个问题:
keys=`az storage account keys list --account-name "$(diagnosticsStorageAccountName)" --resource-group "$(resourceGroup)"`
taskvariable="##vso[task.setvariable variable=_[tempVariable];]"
echo $taskvariable$keys
根据文档echo "##vso[task.setvariable variable=testvar output=true;]%myvar% 应该使变量可用于整个版本。不幸的是,我没有运气。
我在同一个代理作业 (Ubuntu 16.0) 下使用 Powershell 任务克服了这个问题:
$url = "$($env:SYSTEM_TEAMFOUNDATIONSERVERURI)$env:SYSTEM_TEAMPROJECTID/_apis/Release/definitions/$($env:RELEASE_DEFINITIONID)?api-version=5.1"
Write-Host "URL: $url"
$pipeline = Invoke-RestMethod -Uri $url -Headers @{
Authorization = "Bearer $(System.AccessToken)"
}
#Parsing JSON string from previous task
$keys = $(@"
$(_tempVariable)
"@ | ConvertFrom-Json)
# Assignment of variable value
$pipeline.variables.[variableName].value = $keys[0].value
####****************** 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 $(System.AccessToken)"}
write-host "=========================================================="
Write-host "The value of Variable '[variableName]' is updated to" $updatedef.variables.[variableName].value
write-host "=========================================================="
请注意,为了使这项工作正常进行,您需要做几件事。
首先您需要在代理作业上allow access to the OAuth token。
除此之外,您还需要提供“项目集合构建服务”。
Click on security on the release 并单击“项目集合构建服务”用户。
Change the values 用于“编辑版本”和“管理版本”以允许并保存更改。