Цикл foreach конвейера Azure

У меня возникла проблема с выяснением проблемы в этом конвейере.

У меня есть репозиторий GitHub, содержащий одну папку с именем dist. В этой папке есть несколько файлов и папок. Вот структура моего git-хаба:

├── README.md
├── client_pipeline.yaml
├── client_template.yaml
└── dist
    ├── ReportPhishingOutlookAddIn.xml
    └── ReportPhishingOutlookAddInWeb
        ├── Content
        ├── Dialog.html
        ├── Functions
        ├── Images
        └── Scripts

Что я хочу сделать, так это когда я создаю новую папку в этом репо, мой конвейер должен запускать и загружать содержимое папки dist в эту новую папку и сохранять его в хранилище Azure.

Поэтому я решил сначала использовать шаблон конвейера Azure, чтобы определить логику конвейера:

Client_template.yaml

parameters:
  storageaccount: ''
  client: []
steps:
  - ${{ each client in parameters.client }}:
    - task: AzureCLI@2
      displayName: 'Azure CLI'
      inputs:
        AzureSubscription: '<mysubscription>'
        scriptType: bash
        scriptLocation: inlineScript
        inlineScript: |

         az storage blob upload-batch --source dist --destination '$web/${client}' --account-name ${{ parameters.storageaccount}} --output table --no-progress

И я создал еще один конвейер для вызова этого шаблона.

client_pipeline.yaml

variables:
  - name: storageaccount
    value: <mystorageaccount>

steps:
  - template: client_template.yaml
    parameters:
      storageaccount: ${{ variables.storageaccount }}
      client: ["folder","folder1"]

Второй конвейер, который я использую, дает мне свободу добавлять столько клиентов, сколько я хочу, и конвейер должен просто создавать их в учетной записи хранения Azure.

Когда я запускаю свой конвейер, он строит все без каких-либо проблем, но когда я захожу в свою учетную запись хранения, у меня возникают 2 проблемы.

Во-первых, имя папки ${client}, а не фактическое имя имени, которое я указал в своем массиве.

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

Любая помощь, ребята, пожалуйста?

РЕДАКТИРОВАТЬ: я решил проблему №1, теперь я могу создавать несколько папок. Но все же он не копирует все подпапки и файл в папку внутри dist


person Nayden Van    schedule 08.04.2021    source источник


Ответы (1)


По ссылке на эту ветку: https://github.com/Azure/azure-cli/issues/5420#issuecomment-487169413,

az storage azcopy blob upload
-c containerName
--account-name accountName
-s directory/path
-d upload/path

Если необходимо загрузить подпапку, можно добавить флаг --recursive.

Следовательно, у вас может быть рекурсивный флаг, который при установке будет загружать подкаталоги. Включение флага --recursive с пакетной загрузкой больших двоичных объектов хранилища az приведет к загрузке подкаталогов. Примером может быть az storage blob upload-batch -d <container name> -s <path/to/directory> --recursive. Отсутствие рекурсивного флага приведет к загрузке только файлов определенного каталога.

Обновление ›› Поскольку Nayden решил эту проблему с помощью пакета загрузки. Если подпапка пуста, она игнорируется и не копируется. Как только мы поместили несколько файлов во все подпапки, пакет загрузки сделал рекурсивную копию без каких-либо дополнительных флагов.

Разместите здесь, чтобы другие участники сообщества, которые сталкиваются с такими же проблемами, могли быстро найти ответ.

person wallezzi    schedule 09.04.2021
comment
Спасибо за ответ. Итак, я решил обе проблемы с помощью пакета загрузки. Я понял одну вещь: если подпапка пуста, она игнорируется и не копируется. Как только я поместил несколько файлов во все подпапки, пакет загрузки сделал рекурсивную копию без каких-либо дополнительных флагов. Большое спасибо за вашу помощь и товарищ по времени. - person Nayden Van; 09.04.2021
comment
Приятно слышать, что ваша проблема решена с помощью пакета загрузки. Я обновил ответ на ваш ответ и надеюсь, что он поможет другим, у которых возникнет такая же проблема в будущем. Спасибо, что поделились. - person wallezzi; 09.04.2021