将Azure CLI任务的结果存储到发布变量中

时间:2019-09-25 07:39:08

标签: azure-devops

我有一个包含多个作业的发布管道。

在第一个代理作业上,有一个Azure CLI任务,该任务会在Azure上检索存储帐户的密钥。

它执行的命令是:

az storage account keys list --account-name "$(diagnosticsStorageAccountName)" --resource-group "$(resourceGroup)"

我要做的是存储此命令的结果,并将其用于在部署组作业下运行的任务中。

我已经研究了这些资源:

Set Output Variable in Azure CLI task on VSTS

How to modify Azure DevOps release definition variable from a release task?

我尝试了第一个,但没有成功。 我不打扰第二个,因为它似乎很容易破解。

有没有办法做到这一点呢?

1 个答案:

答案 0 :(得分:0)

输出值未正确存储。

使用以下语法时,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%,应使该变量可用于整个发行版。不幸的是我对此没有运气。

我在同一Agent Job(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进行代理工作。

最重要的是,您需要提供“ Project Collection Build Service”。

Click on security on the release,然后单击“ Project Collection Build Service”用户。

Change the values用于“编辑版本”和“管理版本”,以允许和保存更改。