Скажем, у меня есть конвейер выпуска в Azure DevOps
, записанный в yaml
, который имеет две задачи: одну для чтения json из файла и вторую для установки ключа в другой файл json с помощью json прочитано в первом задании. У меня есть следующий pipe.yml -
trigger:
- master
pool:
vmImage: 'ubuntu-latest'
steps:
- task: PowerShell@2
name: ReadMetadataJson
inputs:
filePath: 'MetadataReader.ps1'
arguments: 'Run MetadataReader.ps1 -pathToMetadata metadata.json'
- task: PowerShell@2
name: SetAppSetting
inputs:
filePath: 'AppSettingSetter.ps1'
arguments: 'Run AppSettingSetter.ps1 -pathToAppSetting SomeApp/Data.json -appSettingKey testkey -appSettingValue $($(ReadMetadataJson)).testkey'
- script: echo $(ReadMetadataJson.metadata)
Ниже приведены скрипты Powershell, вызываемые из каждой задачи -
Powershell 1
# Read From the Metadata.json
param ($pathToMetadata)
echo $pathToMetadata
$metadata = Get-content $pathToMetadata | out-string | ConvertFrom-Json
Write-Output "Metadata Json from metadata reader ps script - $metadata"
echo "##vso[task.setvariable variable=metadata;]$metadata"
Powershell 2
# For now just accept the values in parameter and log them
param ($pathToAppSetting, $appSettingKey, $appSettingValue)
echo "pathToAppSetting : $pathToAppSetting"
echo "appSettingKey : $appSettingKey"
echo "appSettingValue : $appSettingValue"
# Code to set in another file. I have this working, so omitting for brevity
И это json файлы -
Метаданные. json
{
"testkey": "TestValueFromMetadata",
"testkey1": "TestValueFromMetadata1"
}
appSetting. json
{
"testkey": "TestValueInAppSetting",
"testkey1": "TestValueInAppSetting1"
}
Проблема заключается в том, что я хочу вернуть данные json в качестве вывода из первой задачи и использовать их во второй задаче для передать параметр второму сценарию powershell. Ниже приведен скриншот результата конвейера после его запуска.
Как видно, написано ReadMetadataJson.metadata: command not found
. Я следовал за документом Microsoft в качестве ссылки и искал другие статьи, но все, что я мог найти, это обрабатывать значения, подобные string
или integer
, но не объект json
. Что я пропускаю или делаю неправильно?