Допустим, у меня есть этот массив:
[ 'value1','value2','value3' ]
Я хочу передать в свой файл yaml этот массив из другого файла.
мой yaml должен принимать массив в этом поле:
parameters:
arrayExpected: arrayValueFromAnotherFile
Я мог бы просто это:
parameters:
arrayExpected: [ 'value1','value2','value3' ]
Но по определенным причинам это не лучший подход в моей ситуации. Поскольку файл yaml не может быть сильно перенаселен значениями массива.
На данный момент я знаю, что в yaml нет доступных операторов импорта, возможно, у кого-нибудь была подобная проблема и он ее решил?
И что именно вы подразумеваете под another file? Шаблон конвейера или...?
Массив будет обработан с помощью foreach на стороне yaml, а затем каждое значение массива будет использоваться в дальнейшем скрипте js. И да, это может быть другой файл yaml или что-то еще, если я могу импортировать значения из другого файла в текущий yaml.
@DanieliusPolujanskis, параметры расширяются перед запуском конвейера. Если вы хотите передать значение из yaml, вам нужно использовать другой конвейер, чтобы получить значение и передать значение в целевой конвейер. Пожалуйста, проверьте ответ ниже, дайте мне знать, если у вас есть какие-либо вопросы.



Я хочу передать в свой файл yaml этот массив из другого файла.
Вы можете использовать another pipeline, чтобы получить массив из файла, а затем передать значение параметра в целевой конвейер через rest API Запускает — Запустить конвейер с помощью templateParameters, чтобы установить параметры.
Например, массив в array.txt:
Образец 1st pipeline, измените целевой конвейер definition id на свой.
trigger: none
pool:
vmImage: Windows-latest
steps:
- task: PowerShell@2
inputs:
targetType: 'inline'
script: |
$array = Get-Content array.txt
$array = $array.TrimStart("[").TrimEnd("]")
Write-Output $array # check the string content
$body = @"
{
"definition": {
"id": 565 # your target pipeline definition id
},
"templateParameters": {
"arrayExpected": "$array"
}
}
"@
$Uri = "$(System.CollectionUri)$(System.TeamProject)/_apis/build/builds?api-version=7.1-preview.7"
Write-Host $Uri
$buildresponse = Invoke-RestMethod -Method Post -ContentType "application/json" -Uri $Uri -Body $body -Headers @{Authorization = "Bearer $(System.AccessToken)"}
write-host $buildresponse
The target pipeline sample:
trigger: none
parameters:
- name: arrayExpected
type: string
default: ""
pool:
vmImage: ubuntu-latest
steps:
- script: echo ${{ parameters.arrayExpected }}
- ${{ each value in split(parameters.arrayExpected, ',')}}:
- script: echo ${{ value }}
displayName: 'check value'
Я использовал $(system.accesstoken) для запуска целевого конвейера. Убедитесь, что у учетной записи build service есть разрешение на целевой конвейер.
Что именно вы планируете делать с этим массивом? Может быть, вместо массива вы можете использовать параметр
filePathи использовать задачу сценария для анализа файла в формате json (или другом)?