Azure pipelines Azure管道-使用azcopy下载文件

Azure pipelines Azure管道-使用azcopy下载文件,azure-pipelines,Azure Pipelines,我可以看到,有一项任务是将本地文件上载到Azure存储或VM。但是,我们如何将blob或文件共享下载到管道代理中呢?目前我正在使用带有SAS URI的azcopy。管道中是否有任务可以使用服务连接来完成此任务?据我所知,我们没有此类任务可以直接满足您的要求。但是您可以利用Azure CLi任务来执行该命令 例如,我可以在Azure cli中执行命令从Azure Blob存储下载文件: steps: - task: AzureCLI@1 displayName: 'Azure CLI '

我可以看到,有一项任务是将本地文件上载到Azure存储或VM。但是,我们如何将blob或文件共享下载到管道代理中呢?目前我正在使用带有SAS URI的azcopy。管道中是否有任务可以使用服务连接来完成此任务?

据我所知,我们没有此类任务可以直接满足您的要求。但是您可以利用Azure CLi任务来执行该命令

例如,我可以在Azure cli中执行命令从Azure Blob存储下载文件:

steps:
- task: AzureCLI@1
  displayName: 'Azure CLI '
  inputs:
    azureSubscription: {service connection}
    scriptLocation: inlineScript
    inlineScript: |
     mkdir $(Build.SourcesDirectory)/BlobFile
     az storage blob download --container-name $(containername) --file $(Build.SourcesDirectory)/BlobFile --name "{file name}" --account-key $(accountkey) --account-name $(accountname)
我建议的逻辑是使用mkdir在当前目录中创建一个文件夹,然后从blob下载文件并保存到这个文件夹中。您可以按照此操作执行azcopy命令


我们已将服务连接集成到此任务中,因此您可以配置服务连接以连接到Azure blob。然后在这个Azure cli任务中选择它。

因此,由于我从Azure存储共享下载文件,而不是blob或container azcopy,因此速度要快得多。使用az存储文件下载批处理速度太慢。相反,我们可以使用bash调用azcopy

在管道代理中安装azcopy

使用az cli任务与azcopy一起下载

@philthy对我来说不起作用,因为我在Azure/Azure存储azcopy GitHub repo中遇到了问题

以下内容确实对我有用

- task: Bash@3
  displayName: Install azcopy
  inputs:
    targetType: 'inline'
    script: |
      curl -sL https://aka.ms/InstallAzureCLIDeb | sudo bash
      mkdir $(Agent.ToolsDirectory)/azcopy && cd "$_"
      wget -O azcopy_v10.tar.gz https://aka.ms/downloadazcopy-v10-linux
      tar -xf azcopy_v10.tar.gz --strip-components=1
- task: AzureCLI@2
  displayName: Download using azcopy
  inputs:
    azureSubscription: my-vmssagents-service-connection
    scriptType: bash
    scriptLocation: inlineScript
    inlineScript: |
      export STORE_NAME="data"
      export CONTAINER_NAME="data"
      export FOLDER="my_folder"

      NOW=`date +"%Y-%m-%dT%H:%M:00Z"` \
      EXPIRY=`date -d "$NOW + 1 day" +"%Y-%m-%dT%H:%M:00Z"` \
      && export SAS_TOKEN=$( az storage container generate-sas \
          --account-name $STORE_NAME \
          --name $CONTAINER_NAME \
          --start $NOW \
          --expiry $EXPIRY \
          --permissions acdlrw \
          --output tsv )

      $(Agent.ToolsDirectory)/azcopy/azcopy copy \
          "https://${STORE_NAME}.blob.core.windows.net/${CONTAINER_NAME}/${FOLDER}/?${SAS_TOKEN}" \
          "." --recursive --include-pattern "*c_*b.nc;left.nc;right.nc" # <-- my specific pattern

我们拥有的存储在Azure文件共享中。所以我目前使用的是az存储文件下载批处理,速度非常慢。我可以在shell任务中使用azcopy,但是我还没有看到为Azure文件共享生成包含列表权限的SAS令牌的方法。在使用az存储文件生成SAS时,是否有一种方法可以自动生成SAS令牌以包括列表权限?@philthy,自动生成SAS令牌意味着什么?请参见下文,有一种方法可以使用Azure CLI而不是通过门户生成SAS令牌。有了它,我就可以通过azcopy自动下载管道了。我在上打开了一个关于az存储文件批量下载性能问题的问题。
- task: AzureCLI@2
  displayName: Download using azcopy
  inputs:
    azureSubscription: 'Service-Connection'
    scriptType: 'bash'
    scriptLocation: 'inlineScript'
    inlineScript: |
      end=`date -u -d "180 minutes" '+%Y-%m-%dT%H:%M:00Z'`
      sas=$(az storage share generate-sas -n share-name --account-name account-name --https-only --permissions lr --expiry $end -o tsv)
      $(Agent.ToolsDirectory)/azcopy/azcopy copy "https://account-name.file.core.windows.net/share-name/folder/?$sas" "/Download-Path" --recursive --check-md5=FailIfDifferent
- task: Bash@3
  displayName: Install azcopy
  inputs:
    targetType: 'inline'
    script: |
      curl -sL https://aka.ms/InstallAzureCLIDeb | sudo bash
      mkdir $(Agent.ToolsDirectory)/azcopy && cd "$_"
      wget -O azcopy_v10.tar.gz https://aka.ms/downloadazcopy-v10-linux
      tar -xf azcopy_v10.tar.gz --strip-components=1
- task: AzureCLI@2
  displayName: Download using azcopy
  inputs:
    azureSubscription: my-vmssagents-service-connection
    scriptType: bash
    scriptLocation: inlineScript
    inlineScript: |
      export STORE_NAME="data"
      export CONTAINER_NAME="data"
      export FOLDER="my_folder"

      NOW=`date +"%Y-%m-%dT%H:%M:00Z"` \
      EXPIRY=`date -d "$NOW + 1 day" +"%Y-%m-%dT%H:%M:00Z"` \
      && export SAS_TOKEN=$( az storage container generate-sas \
          --account-name $STORE_NAME \
          --name $CONTAINER_NAME \
          --start $NOW \
          --expiry $EXPIRY \
          --permissions acdlrw \
          --output tsv )

      $(Agent.ToolsDirectory)/azcopy/azcopy copy \
          "https://${STORE_NAME}.blob.core.windows.net/${CONTAINER_NAME}/${FOLDER}/?${SAS_TOKEN}" \
          "." --recursive --include-pattern "*c_*b.nc;left.nc;right.nc" # <-- my specific pattern