Как создать несколько конвейеров в Microsoft Azure DevOps, вызывая объекты из одного или нескольких файлов CSV?
Как скрипт может получить пустое место в одном из столбцов Excel? Например путь к папке
Это то, что у меня есть до сих пор.
Import-Csv -Path "C:\Users\*******\Downloads\excel\notes.csv"
$pipelineName = $pipelineVariables.name
$pipelineFolderPath = $pipelineVariables.FolderPath
$pipelineDescription = $pipelineVariables.Description
$pipelineRepostiory = $pipelineVariables.Repository
$pipelineBranch = $pipelineVariables.Branch
$pipelineYamlPath = $pipelineVariables.YamlPath
az pipelines create --name $pipelineName --folder-path $pipelineFolderPath --description $pipelineDescription --repository $pipelineRepostiory --branch $pipelineBranch --yml-path $pipelineYamlPath
Значение переменных.
$pipelineName = $pipelineVariables.name
$pipelineFolderPath = $pipelineVariables.FolderPath
$pipelineDescription = $pipelineVariables.Description
$pipelineRepostiory = $pipelineVariables.Repository
$pipelineBranch = $pipelineVariables.Branch
$pipelineYamlPath = $pipelineVariables.YamlPath
Name : test-ci
FolderPath : build
Description : test ci pipeline
Repository : https://dev.azure.com/******/*****/_git/******
Branch : prod
Yaml Path : ./yaml/build.yml
Это сообщение об ошибке, которое я получаю.
az : ERROR: argument --folder-path: expected one argument
At line:1 char:1
+ az pipelines create --name $pipelineName --folder-path $pipelineFolde ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : NotSpecified: (ERROR: argument...ed one argument:String) [], RemoteException
+ FullyQualifiedErrorId : NativeCommandError
Это мой CSV-файл


Если ваш CSV-файл хранится в переменной $pipelineVariables, то чтобы выбрать путь к папке или путь Yaml (с пробелами), вам просто:
$pipelineFolderPath = $pipelineVariables."Folder Path"
$pipelineYamlPath = $pipelineVariables."Yaml Path"
Вот краткий пример с вашим CSV-файлом и данными:
Во-первых, просто импортировав его в переменную, я вижу, что в моем случае он не был должным образом создан в массиве объектов Powershell:
Для решения этой проблемы -Delimiter ";" используется:
Пример фрагмента кода с циклом foreach:
$Csv = Import-Csv .\CreatePipelineExample.csv -Delimiter ";"
foreach ($Pipeline in $Csv) {
az pipelines create --name $Pipeline.Name --folder-path $Pipeline."Folder Path" --description $Pipeline.Description --repository $Pipeline.Repository --branch $Pipeline.Branch --yml-path $Pipeline."Yaml Path"
}
Надеюсь, это поможет! Удачи!
Привет @GalnaGreta, для переменных с пробелами добавление разделителя не сработало. Любое предложение? Кстати, это работает, если нет пробелов.
Разделитель был нужен только для того, чтобы продемонстрировать, что он мне нужен при импорте данных CSV. Если при импорте CSV-данных вы получаете правильный объект Powershell без разделителя, разделитель вам не нужен. Если вы сохраните CSV-данные в свою переменную с именем $pipelineVariables, то для получения значений с пробелами просто добавьте кавычки при извлечении значения, как показано в моем примере: $pipelineVariables."Путь к папке" $pipelineVariables."Yaml Path"
Вы можете использовать -Delimiter ",", а не ; вместо csv import.
Кроме того, добавьте --project для вашей команды az pipelines create.
Для входа используйте команду: echo PAT | az devops login --organization https://dev.azure.com/orgname.
С помощью приведенного ниже сценария PowerShell:
# Import CSV file
$csvData = Import-Csv -Path "C:\Users\Administrator\Downloads\excel\notes.csv" -Delimiter ","
# Loop through each row in the CSV and create a pipeline
foreach ($pipeline in $csvData) {
# Output each value
Write-Output "pipelineName: $($pipeline.Name)"
Write-Output "pipelineFolderPath: $($pipeline.'Folder Path')"
Write-Output "pipelineDescription: $($pipeline.Description)"
Write-Output "pipelineRepository: $($pipeline.Repository)"
Write-Output "pipelineBranch: $($pipeline.Branch)"
Write-Output "pipelineYamlPath: $($pipeline.'Yaml Path')"
az pipelines create --name $($pipeline.Name) --folder $($pipeline.'Folder Path') --description $($pipeline.Description) --repository $($pipeline.Repository) --branch $($pipeline.Branch) --yml-path $($pipeline.'Yaml Path') --project {projectname}
Write-Output "------------------------"
}
Вывод скрипта:
Созданы трубопроводы:
PS: в моем скрипте можно даже убрать -Delimiter "," для импорта csv, это тоже работает.
Я попробовал ваш сценарий и исправил содержимое. я попытался вывести каждое значение для подтверждения и добавить
--projectдля командыaz pipelines create, если она не предопределена. Я добавил подробности ниже, спасибо.