Все,
У меня есть приведенная ниже настройка конвейера Azure DevOps, которая копирует секреты хранилища ключей с одного KV на другой. Как видите, у меня две задачи: 1) читать секреты и 2) писать секреты. Мне трудно понять, как передать переменную $ secrets (через echo ## vso [task.setVariable variable = sourceSecrets] $ json < / strong>) от первой задачи ко второй.
stages:
- stage: "Test1"
displayName: "Test1 - Copy KV"
jobs:
- deployment : "Deploy"
timeoutInMinutes: 120
variables:
sourceSecrets: ""
strategy:
runOnce:
deploy:
steps:
- task: AzureCLI@2
inputs:
azureSubscription: $(ServiceConnection1)
scriptType: 'pscore'
scriptLocation: 'inlineScript'
inlineScript: |
if ("$(mysubscription1)"){
az account set --subscription "mysubscription1"
}
$secNames = az keyvault secret list --vault-name "kvName1" -o json --query "[].name" | ConvertFrom-Json
Write-Host 'Reading secrets...'
$secrets = $secNames | % {
$secret = az keyvault secret show --name $_ --vault-name "kvName1" -o json | ConvertFrom-Json
[PSCustomObject]@{
name = $_;
value = $secret.value;
}
}
$json = $($secrets | ConvertTo-Json)
echo "##vso[task.setVariable variable=sourceSecrets]$json"
- task: AzureCLI@2
inputs:
azureSubscription: $(ServiceConnection2)
scriptType: 'pscore'
scriptLocation: 'inlineScript'
inlineScript: |
if ("$(mysubscription2)"){
az account set --subscription $(mysubscription2)
}
$secrets = "$(sourceSecrets)" | ConvertFrom-Json
$secrets.foreach{
Write-Host 'Writing secrets:'
az keyvault secret set --vault-name $(kvName2) --name $_.name --value $_.value --output none
Write-Host '---->' $_.name
}
Когда конвейер выполняется, задачи выполняются нормально. Однако во второй задаче возникла ошибка:
ConvertFrom-Json : Conversion from JSON failed with error: Error reading JArray from JsonReader. Path '', line 1, position 1.
At /home/vsts/work/_temp/azureclitaskscript1620360635888_inlinescript.ps1:4 char:18
+ $secrets = "[" | ConvertFrom-Json
+ ~~~~~~~~~~~~~~~~
+ CategoryInfo : NotSpecified: (:) [ConvertFrom-Json], ArgumentException
+ FullyQualifiedErrorId : System.ArgumentException,Microsoft.PowerShell.Commands.ConvertFromJsonCommand
Я провел некоторую проверку, оказалось, что переменная $ (sourceSecrets) содержит только [вместо всего содержимого json. Это означает, что строка echo ## vso [task.setVariable variable = sourceSecrets] $ json из первой задачи исключает все, что находится после [. Я не могу понять, почему он это делает. Идеи?
Заранее спасибо.