Как создать несколько конвейеров Azure Devops, вызывая объекты из одного или нескольких файлов CSV?

Как создать несколько конвейеров в 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-файл

Я попробовал ваш сценарий и исправил содержимое. я попытался вывести каждое значение для подтверждения и добавить --project для команды az pipelines create, если она не предопределена. Я добавил подробности ниже, спасибо.

wade zhou - MSFT 09.04.2024 11:02
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
В предыдущей статье мы завершили установку базы данных, для тех, кто не знает.
Как установить LAMP Stack 1/2 на Azure Linux VM
Как установить LAMP Stack 1/2 на Azure Linux VM
В дополнение к нашему предыдущему сообщению о намерении Azure прекратить поддержку Azure Database для MySQL в качестве единого сервера после 16...
0
1
91
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Если ваш CSV-файл хранится в переменной $pipelineVariables, то чтобы выбрать путь к папке или путь Yaml (с пробелами), вам просто:

$pipelineFolderPath = $pipelineVariables."Folder Path"
$pipelineYamlPath = $pipelineVariables."Yaml Path"

Пример

Вот краткий пример с вашим CSV-файлом и данными:

  1. Во-первых, просто импортировав его в переменную, я вижу, что в моем случае он не был должным образом создан в массиве объектов Powershell:

  2. Для решения этой проблемы -Delimiter ";" используется:

  3. Пример фрагмента кода с циклом 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, для переменных с пробелами добавление разделителя не сработало. Любое предложение? Кстати, это работает, если нет пробелов.

albbla91 04.04.2024 16:22

Разделитель был нужен только для того, чтобы продемонстрировать, что он мне нужен при импорте данных CSV. Если при импорте CSV-данных вы получаете правильный объект Powershell без разделителя, разделитель вам не нужен. Если вы сохраните CSV-данные в свою переменную с именем $pipelineVariables, то для получения значений с пробелами просто добавьте кавычки при извлечении значения, как показано в моем примере: $pipelineVariables."Путь к папке" $pipelineVariables."Yaml Path"

GalnaGreta 04.04.2024 18:37
Ответ принят как подходящий

Вы можете использовать -Delimiter ",", а не ; вместо csv import.

Кроме того, добавьте --project для вашей команды az pipelines create.

  1. Для входа используйте команду: echo PAT | az devops login --organization https://dev.azure.com/orgname.

  2. С помощью приведенного ниже сценария 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, это тоже работает.

Другие вопросы по теме