Azure 管道 foreach 循环

Azure pipeline foreach loop

我在找出这个管道中的问题时遇到了一些问题。

我有一个 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}而不是我在数组中指定的名称的实际名称。

第二个问题是上传,只上传主文件夹和子文件夹none。

请大家帮忙?

编辑: 我解决了问题 1,现在我可以创建多个文件夹。 但它仍然没有复制 dist

内文件夹中的所有子文件夹和文件

参考这个话题: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

因此,您可以有一个递归标志,设置后将上传子目录。在 az storage blob upload-batch 中包含 --recursive 标志会上传子目录。例如 az storage blob upload-batch -d <container name> -s <path/to/directory> --recursive。不包括递归标志将只上传特定目录的文件。

更新>> 由于 Nayden 已通过使用上传批处理解决了此问题。如果子文件夹为空,它将被忽略并且不会被复制。一旦我们将一些文件放入所有子文件夹中,上传批处理就会在没有任何额外标志的情况下进行递归复制。

在此发帖,以便遇到相同问题的其他社区成员可以快速找到答案。