AzureFileCopy@3 - Azure 文件复制 v3 任务

将文件复制到Azure Blob 存储或虚拟机。

语法

# Azure file copy v3
# Copy files to Azure Blob Storage or virtual machines.
- task: AzureFileCopy@3
  inputs:
    SourcePath: # string. Required. Source. 
    azureSubscription: # string. Alias: ConnectedServiceNameARM. Required. Azure Subscription. 
    Destination: # 'AzureBlob' | 'AzureVMs'. Required. Destination Type. 
    storage: # string. Alias: StorageAccountRM. Required. RM Storage Account. 
    #ContainerName: # string. Required when Destination = AzureBlob. Container Name. 
    #BlobPrefix: # string. Optional. Use when Destination = AzureBlob. Blob Prefix. 
    #resourceGroup: # string. Alias: EnvironmentNameRM. Required when Destination = AzureVMs. Resource Group. 
    #ResourceFilteringMethod: 'machineNames' # 'machineNames' | 'tags'. Optional. Use when Destination = AzureVMs. Select Machines By. Default: machineNames.
    #MachineNames: # string. Optional. Use when Destination = AzureVMs. Filter Criteria. 
    #vmsAdminUserName: # string. Required when Destination = AzureVMs. Admin Login. 
    #vmsAdminPassword: # string. Required when Destination = AzureVMs. Password. 
    #TargetPath: # string. Required when Destination = AzureVMs. Destination Folder. 
    #AdditionalArgumentsForBlobCopy: # string. Optional Arguments (for uploading files to blob). 
    #AdditionalArgumentsForVMCopy: # string. Optional. Use when Destination = AzureVMs. Optional Arguments (for downloading files to VM). 
    #enableCopyPrerequisites: false # boolean. Optional. Use when Destination = AzureVMs. Enable Copy Prerequisites. Default: false.
    #CopyFilesInParallel: true # boolean. Optional. Use when Destination = AzureVMs. Copy in Parallel. Default: true.
    #CleanTargetBeforeCopy: false # boolean. Optional. Use when Destination = AzureVMs. Clean Target. Default: false.
    #skipCACheck: true # boolean. Optional. Use when Destination = AzureVMs. Test Certificate. Default: true.
  # Output
    #outputStorageUri: # string. Storage Container URI. 
    #outputStorageContainerSasToken: # string. Storage Container SAS Token. 
    #sasTokenTimeOutInMinutes: # string. SAS Token Expiration Period In Minutes.

输入

SourcePath - 源
string. 必需。

指定源文件夹、本地计算机上的文件或 UNC 共享的绝对路径。 可以使用预定义的系统变量,例如 $(Build.Repository.LocalPath)。 不支持包含通配符的名称,例如 *.zip。 指定的值或表达式应返回单个文件夹或文件名。


azureSubscription - Azure 订阅
输入别名: ConnectedServiceNameARMstring. 必需。

指定为目标 Azure 服务、虚拟机或存储帐户所在的订阅配置的 Azure 资源管理器服务连接的名称。 有关更多详细信息,请参阅 Azure 资源管理器概述


Destination - 目标类型
string. 必需。 允许的值: AzureBlob (Azure Blob) , AzureVMs (Azure VM) 。

指定目标类型。


storage - RM 存储帐户
输入别名: StorageAccountRMstring. 必需。

指定预先存在的 ARM 存储帐户。 这是用作将文件复制到 Azure VM 的中介的存储帐户。


ContainerName - 容器名称
string. 当 Destination = AzureBlob 时,需要此选项。

将文件复制到其中的容器的名称。 如果存储帐户中不存在指定的容器,则会创建该容器。

若要在容器中创建虚拟目录,请使用 blob 前缀输入。 例如,对于目标位置 https://myaccount.blob.core.windows.net/mycontainer/vd1/vd2/,请指定容器名称和 mycontainer blob 前缀: vd1/vd2


BlobPrefix - Blob 前缀
string. 可选。 在 时 Destination = AzureBlob使用 。

指定可用于筛选文件的前缀。

示例:可以追加一个内部版本号,以筛选具有相同内部版本号的所有 Blob 中的文件。

示例:如果指定 blob 前缀 myvd1,则会在容器中创建一个虚拟目录。 文件从源 https://myaccount.blob.core.windows.net/mycontainer/myvd1/复制到 。


resourceGroup - 资源组
输入别名: EnvironmentNameRMstring. 当 Destination = AzureVMs 时,需要此选项。

指定文件将复制到的目标资源组的名称。


ResourceFilteringMethod - 计算机选择依据
string. 可选。 在 时 Destination = AzureVMs使用 。 允许的值: machineNames (计算机名称) , tags。 默认值:machineNames

指定用于标识资源组中 VM 子集的 VM 主机名或标记。 仅通过 Azure 资源管理器创建的资源支持标记


MachineNames - 筛选条件
string. 可选。 在 时 Destination = AzureVMs使用 。

提供 VM 名称或标记名称的列表,用于标识任务将面向的 VM。 有效的筛选条件包括:

  • Azure 资源组的名称。
  • 上一个任务的输出变量。
  • 标记名称或 VM 名称的逗号分隔列表。
  • 使用以逗号分隔的 FQDN 或 IP 地址列表设置 VM 名称的格式。
  • 将筛选器的标记名称的格式设置为 {TagName}:{Value}。 示例: Role:DB;OS:Win8.1ffwebffdb或 标记,如 Role:DBWebOS:Win8.1

注意:标记的有效分隔符包括 、 (逗号) 、: (冒号) 和 ; (分号) 。 提供多个标记时,任务将仅在包含指定标记的 VM 中运行。 默认情况下,任务在所有 VM 中运行。


vmsAdminUserName - 管理员登录名
string. 当 Destination = AzureVMs 时,需要此选项。

提供对所有目标 VM 具有管理权限的帐户的用户名。

  • 支持的格式包括: usernamedomain\usernamemachine-name\username.\username
  • 不支持 UPN 格式,包括 username@domain.com 和内置系统帐户(例如 NT Authority\System )。

vmsAdminPassword - 密码
string. 当 Destination = AzureVMs 时,需要此选项。

提供 VM 的管理员密码。

有效输入包括生成或发布管道(如 $(passwordVariable))中定义的变量。 若要保护密码,请将其标记为 secret


TargetPath - 目标文件夹
string. 当 Destination = AzureVMs 时,需要此选项。

指定将文件复制到的 Azure VM 中文件夹的路径。

支持 $env:windir$env:systemroot 等环境变量。 示例:$env:windir\FabrikamFiber\Webc:\FabrikamFiber


AdditionalArgumentsForBlobCopy - 可选参数(用于将文件上传到 Blob)
string.

为 提供在上传到 Blob(如 )/NC:10时可以应用的其他参数AzCopy.exe

如果未指定可选参数,则默认添加以下参数。

  • /Y
  • /SetContentType
  • /Z
  • /V
  • /S - 在容器名称不是 $root时添加。
  • /BlobType:page -当指定的存储帐户是高级帐户时添加的。
  • /Pattern - 在源路径为文件时添加。 包含在任何其他指定的可选参数中。

AdditionalArgumentsForVMCopy - 可选参数(用于将文件下载到 VM)
string. 可选。 在 时 Destination = AzureVMs使用 。

向 提供在下载到 AzCopy.exe VM(如 ) /NC:10时可以应用的其他参数。

如果未指定可选参数,则默认添加以下内容。

  • /Y
  • /S
  • /Z
  • /V

enableCopyPrerequisites - 启用复制先决条件
boolean. 可选。 在 时 Destination = AzureVMs使用 。 默认值:false

启用后,使用自签名证书在端口 5986 上配置 Windows 远程管理 (WinRM) 侦听器,而不是 HTTPS 协议。 在 Azure VM 上执行复制操作所必需的。 如果目标 VM 使用负载均衡器,请为目标端口配置入站 NAT 规则, (5986) 。 仅适用于 ARM VM。 在与网络安全组关联的目标 VM (NSG) 上,配置入站安全规则以允许在端口 5986 上进行访问。


CopyFilesInParallel - 并行复制
boolean. 可选。 在 时 Destination = AzureVMs使用 。 默认值:true

指定 true 以将文件并行复制到目标 VM。 使用此值可以减少执行操作所用的总时间。


CleanTargetBeforeCopy - 清理目标
boolean. 可选。 在 时 Destination = AzureVMs使用 。 默认值:false

将此值设置为 true 将清除目标文件夹,然后再执行复制操作。


skipCACheck - 测试证书
boolean. 可选。 在 时 Destination = AzureVMs使用 。 默认值:true

在通过 HTTPS 进行连接之前,默认值不会验证服务器证书是否由受信任的 CA 签名。


outputStorageUri - 存储容器 URI
string.

指定用于文件复制到的存储容器 URI 的变量的名称。 仅当所选目标是 Azure Blob 时有效。


outputStorageContainerSasToken - 存储容器 SAS 令牌
string.

指定用于访问已复制文件的存储容器 SAS 令牌的变量的名称。 使用此变量作为后续任务的输入。 默认情况下,SAS 令牌在 4 小时后过期。


sasTokenTimeOutInMinutes - SAS 令牌有效期(分钟)
string.

指定 SAS 令牌过期的时间(以分钟为单位)。 仅当所选目标为 Azure Blob 时有效。


任务控制选项

除了任务输入,所有任务都有控制选项。 有关详细信息,请参阅 控制选项和常见任务属性

输出变量

无。

备注

版本AzureFileCopy@3中的新增功能

  • AzureFileCopy@3支持 Az Module,并且已停止支持 Azure 经典服务终结点。

  • 该任务用于复制安装应用所需的应用程序文件和其他项目,例如 PowerShell 脚本、PowerShell-DSC 模块等。

  • 当目标是 Azure VM 时,文件将首先复制到自动生成的 Azure Blob 容器,然后下载到 VM 中。 将文件成功复制到 VM 后,将删除容器。

  • 该任务使用 AzCopy,这是一个命令行实用工具,用于快速将数据从/复制到 Azure 存储帐户。 任务版本 3 或更低版本使用 AzCopy V7。

  • 要动态部署包含虚拟机的 Azure 资源组,请使用 Azure 资源组部署任务。 此任务包含一个示例模板,该模板可以执行所需的操作来设置 VM 上的 WinRM HTTPS 协议、打开防火墙中的端口 5986,以及安装测试证书。

注意

如果要作为 Blob 存储中的容器部署到 Azure 静态网站,请使用 版本 2 或更高版本来保留 $web 容器名称。

常见问题解答

使用此任务的 Azure PowerShell 先决条件是什么?

该任务要求在运行自动化代理的计算机上安装Azure PowerShell。 建议的版本是 1.0.2,但该任务适用于版本 0.9.8 及更高版本。 使用 Azure PowerShell Installer v1.0.2 获取建议的版本。

此任务的 WinRM 先决条件是什么?

该任务使用 WinRM HTTPS 协议将文件从存储 Blob 容器复制到 Azure VM。 必须在 VM 上配置 WinRM HTTPS 服务,并安装合适的证书。

如果 VM 是在未打开 WinRM HTTPS 端口的情况下创建的,请执行以下步骤:

  1. 配置入站访问规则,以在每个 VM 的端口 5986 上允许 HTTPS。
  2. 禁用 UAC 远程限制
  3. 指定任务凭据,以便使用管理员级登录名(格式为 用户名 )访问 VM,而无需任何域引用。
  4. 在运行自动化代理的计算机上安装证书。
  5. 为自签名证书设置任务的 “测试 证书”参数。

应选择哪种类型的服务连接?

下表列出了存储帐户类型和关联的服务连接。 若要确定存储帐户是基于经典 API 还是资源管理器 API,请登录到Azure 门户并搜索经典) 存储帐户 (存储帐户

存储帐户类型 TFS/TS 中的 Azure 服务连接
资源管理器 Azure 资源管理器服务连接
经典 使用学校或工作帐户进行基于证书或基于凭据的身份验证的 Azure 服务连接
  • 对于 Azure 经典资源,请将 Azure 服务连接类型与基于证书或凭据的身份验证结合使用。 如果使用基于凭据的身份验证,请确保凭据适用于 学校或工作帐户。 不支持和 joe@hotmail.comjoe@live.com Microsoft 帐户。

  • 对于 Azure 资源管理器 VM,请使用 Azure 资源管理器 服务连接类型。 有关详细信息,请参阅 使用服务主体自动执行 Azure 资源组部署

  • 如果使用 Azure 资源管理器服务连接类型或具有基于证书的身份验证的 Azure 服务连接类型,则任务会自动筛选相应的经典存储帐户、较新的 Azure 资源管理器存储帐户和其他字段。 例如,资源组或云服务,以及虚拟机。

注意

目前,使用基于凭据的身份验证的 Azure 服务连接类型不会筛选存储、资源组或云服务以及虚拟机字段。

如何实现修复失败“403:此请求无权使用此权限执行此操作”?

当 Azure DevOps 创建服务并授权与 Azure 的连接时,它会在订阅的 Active Directory 中创建应用注册。 此标识会以角色 Contributor 自动添加到你选择授权的资源组中的所有资源。 若要将 Blob 上传到存储帐户,仅使用 Contributor是不够的。 必须手动将 Storage Blob Data Contributor 角色分配给应用注册标识

复制现有继承条目中的应用标识(如 Contributor IAM 窗格中所示),并在 UI 中 Add role assignment 显式搜索它。 下拉列表中未列出标识,必须搜索其标识符。

如果资源组同时包含经典 VM 和 资源管理器 VM,会发生什么情况?

如果指定的资源组同时包含 Azure 资源管理器 VM 和经典 VM,则目标 VM 集取决于连接类型。

  • 对于基于证书的连接和基于凭据的连接,复制操作仅在经典 VM 上执行。
  • 对于基于服务主体名称的连接,复制操作仅在资源管理器 VM 上执行。

如何创建用于此任务的学校帐户或工作帐户?

可以轻松创建合适的帐户,以便在服务连接中使用:

  1. 使用 Azure 门户在 Azure Active Directory 中创建新的用户帐户。
  2. 将 Azure Active Directory 用户帐户添加到 Azure 订阅中的共同管理员组。
  3. 使用此用户帐户登录到 Azure 门户并更改密码。
  4. 在服务连接中为此帐户使用新凭据。 将使用此帐户处理部署。

示例

# Example: Upload files from Pipeline staging directory to blob storage.
- task: AzureFileCopy@3
  displayName: 'Example Step Name'
  inputs:
    sourcePath: '$(Build.ArtifactStagingDirectory)/BlobsToUpload'
    additionalArgumentsForBlobCopy: |
      '/Y' # Supresses all AZCopy Confirmations. Used here to allow overwrites
      '/Pattern:*' # Pattern of files to copy.
      '/S' # Recursive Copy
    azureSubscription: 'Subscription Name'
    destination: AzureBlob
    storage: storageaccountname
    containerName: storagecontainername
    blobPrefix: targetdirectoryincontainer

要求

要求 说明
管道类型 YAML,经典内部版本,经典版本
运行平台 Agent、DeploymentGroup
需求 自承载代理必须具有满足以下要求的功能才能运行使用此任务的作业:azureps
功能 此任务不满足作业中后续任务的任何要求。
命令限制 任意
可设置的变量 任意
代理版本 1.103.0 或更高版本
任务类别 部署