我有一个包含多个作业的发布管道。
在第一个代理作业上,有一个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?
我尝试了第一个,但没有成功。 我不打扰第二个,因为它似乎很容易破解。
有没有办法做到这一点呢?
答案 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用于“编辑版本”和“管理版本”,以允许和保存更改。