Azure 文件复制任务版本3或更早版本
Azure DevOps Services | Azure DevOps Server 2020 | Azure DevOps Server 2019 | TFS 2018
使用此任务可将文件复制到 Microsoft Azure 存储 blob 或虚拟机) (vm。
注意
在 Microsoft Team Foundation Server (TFS) 2018 和更低版本中,生成和发布管道被称为“定义”,运行被称为“生成”,服务连接被称为“服务终结点”,阶段被称为“环境”,而作业被称为“阶段” 。
此任务用于复制应用程序文件和其他所需的项目,以便安装应用;例如 PowerShell 脚本、PowerShell DSC 模块等。
如果目标是 Azure Vm,则首先将文件复制到自动生成的 Azure blob 容器,然后将其下载到 Vm 中。 成功将文件复制到 Vm 后,会删除容器。
该任务使用 AzCopy,它是用于快速将数据从和复制到 Azure 存储帐户的命令行实用工具。 任务版本3或更低版本使用 AzCopy V7。
若要动态部署包含虚拟机的 Azure 资源组,请使用 Azure 资源组部署 任务。 此任务具有一个示例模板,该模板可执行所需的操作,以便在虚拟机上设置 WinRM HTTPS 协议,在防火墙中打开5986端口,然后安装测试证书。
注意
如果要将 Azure 静态网站部署为 blob 存储中的容器,则必须使用该任务的 版本 2 或更高版本,才能保留 $web 容器名称。
YAML 代码段
# Azure file copy
# Copy files to Azure Blob Storage or virtual machines
- task: AzureFileCopy@3
inputs:
sourcePath:
azureSubscription:
destination: # Options: azureBlob, azureVMs
storage:
#containerName: # Required when destination == AzureBlob
#blobPrefix: # Optional
#resourceGroup: # Required when destination == AzureVMs
#resourceFilteringMethod: 'machineNames' # Optional. Options: machineNames, tags
#machineNames: # Optional
#vmsAdminUserName: # Required when destination == AzureVMs
#vmsAdminPassword: # Required when destination == AzureVMs
#targetPath: # Required when destination == AzureVMs
#additionalArgumentsForBlobCopy: # Optional
#additionalArgumentsForVMCopy: # Optional
#enableCopyPrerequisites: false # Optional
#copyFilesInParallel: true # Optional
#cleanTargetBeforeCopy: false # Optional
#skipCACheck: true # Optional
#outputStorageUri: # Optional
#outputStorageContainerSasToken: # Optional
#sasTokenTimeOutInMinutes: # Optional
# Example: Upload files from Pipeline staging directory to blob storage.
- task: AzureFileCopy@2
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
自变量
| 参数 | 说明 |
|---|---|
| Source | 必需。 要复制的文件的源。 可以使用预定义的系统变量, $(Build.Repository.LocalPath) 例如。 不支持包含通配符的名称(如 *.zip )。 |
| Azure 连接类型 | 必需。 选择用于定义与 Azure 的连接的服务连接类型。 选择azure 经典或azure 资源管理器。 |
| Azure 经典订阅 | 如果为 " Azure 连接类型" 参数选择 " azure 经典",则是必需的。 为目标 Azure 服务、虚拟机或存储帐户所在的订阅配置的 Azure 经典服务连接 的名称。 |
| Azure RM 订阅 | 如果为azure 连接类型参数选择azure 资源管理器,则为必需。 为目标 azure 服务、虚拟机或存储帐户所在的订阅配置的Azure 资源管理器服务连接的名称。 有关更多详细信息,请参阅Azure 资源管理器概述。 |
| 目标类型 | 必需。 文件的目标目标的类型。 选择 " Azure Blob " 或 " azure vm"。 |
| 经典存储帐户 | 如果为 " Azure 连接类型" 参数选择 " azure 经典",则是必需的。 Azure 订阅中现有存储帐户的名称。 |
| RM 存储帐户 | 如果为azure 连接类型参数选择azure 资源管理器,则为必需。 Azure 订阅中现有存储帐户的名称。 |
| 容器名称 | 如果选择 " Azure Blob " 作为 目标类型 参数,则需要此参数。 要将文件复制到的容器的名称。 如果不存在具有此名称的容器,则将创建一个新容器。 |
| Blob 前缀 | 如果选择 " Azure Blob " 作为 目标类型 参数,则为可选。 Blob 名称的前缀,可用于筛选 blob。 例如,使用生成号可以轻松地在下载具有相同生成号的所有 blob 时进行筛选。 |
| 云服务 | 如果为Azure 连接类型参数选择azure 经典,并为目标类型参数选择 azure vm ,则是必需的。 虚拟机在其中运行的 Azure 云服务的名称。 |
| 资源组 | 如果选择 azure资源管理器用于azure 连接类型参数,并选择azure vm作为目标类型参数,则为必需。 运行虚拟机的 Azure 资源组的名称。 |
| 选择计算机依据 | 使用 筛选条件 参数时,根据要如何指定组中的计算机,请选择 " 计算机名称 " 或 " 标记"。 |
| 筛选条件 | 可选。 标识任务将面向的计算机的计算机名称或标记名称的列表。 筛选条件可以是: - Azure 资源组的名称。 -上一个任务的输出变量。 -逗号分隔的标记名称或计算机名称的列表。 使用计算机名称时的格式是计算机 Fqdn 或 IP 地址的逗号分隔列表。 将筛选器的标记名称指定为 {TagName}:{Value} 示例: Role:DB;OS:Win8.1 |
| 管理员登录名 | 如果为目标类型参数选择Azure vm ,则需要此参数。 具有所有目标 Vm 的管理权限的帐户的用户名。 -支持诸如 用户名、 域 \用户名、 machine-name\username和 .\username 的格式。 -不支持 UPN 格式( username@domain.com 如和内置系统帐户,如 NT Authority\System )。 |
| 密码 | 如果为目标类型参数选择Azure vm ,则需要此参数。 指定为 Admin Login 参数的帐户的密码。 使用 " 变量 " 选项卡中定义的变量的挂锁图标来保护该值,并在此处插入变量名称。 |
| 目标文件夹 | 如果为目标类型参数选择Azure vm ,则需要此参数。 Azure Vm 中要将文件复制到的文件夹。 支持和 $env:systemroot 等 $env:windir 环境变量。 示例:$env:windir\FabrikamFiber\Web 和 c:\FabrikamFiber |
| 其他参数 | 可选。 要传递到 AzCopy.exe 程序的任何参数,这些参数可在上传到 blob 并下载到 vm 时使用。 有关详细信息,请参阅使用 AzCopy 命令行实用工具传输数据。 如果你使用的是仅支持 Azure 页 blob 的高级版存储帐户,则将传递 /BlobType:Page 作为附加参数。 |
| 启用复制必备组件 | 如果选择 azure资源管理器用于azure 连接类型参数,并选择azure vm作为目标类型参数,则可用。 设置此选项将使用自签名证书在端口5986上通过 HTTPS 协议配置 Windows 远程管理 (WinRM) 侦听器。 在 Azure 虚拟机上执行复制操作时需要此配置。 -如果通过负载平衡器访问目标虚拟机,请确保将入站 NAT 规则配置为允许在端口5986上进行访问。 -如果目标虚拟机与 (NSG) 的网络安全组相关联,请将入站安全规则配置为允许在端口5986上进行访问。 |
| 并行复制 | 如果为 "目标类型" 参数选择 " Azure vm ",则可用。 设置此选项会导致进程并行执行复制的文件。 这可以显著减少所用的总时间。 |
| 清理目标 | 如果为 "目标类型" 参数选择 " Azure vm ",则可用。 设置此选项将导致在复制过程开始之前删除目标文件夹中的所有文件。 |
| 测试证书 | 如果为 "目标类型" 参数选择 " Azure vm ",则可用。 将文件从中间存储 blob 复制到 Azure Vm 时,WinRM 需要使用 HTTPS 传输证书。 如果设置了 "使用自签名证书",请设置此选项,以防止进程使用受信任的证书颁发机构验证证书 (CA) 。 |
| Output-存储容器 URI | 可选。 将使用复制文件的存储容器的 URI 更新的变量的名称。 使用此变量作为后续任务的输入。 |
| Output-存储容器 SAS 令牌 | 可选。 将使用将文件复制到的存储容器的存储访问安全性 (SAS) 标记更新的变量的名称。 使用此变量作为后续任务的输入。 默认情况下,SAS 令牌在4小时后过期。 |
| 控制选项 | 请参阅 控件选项 |
相关任务
开源
此任务在 GitHub 上开放源代码。 欢迎提供反馈和建议。
常见问题解答
使用此任务 Azure PowerShell 的先决条件是什么?
任务需要在运行自动化代理的计算机上安装 Azure PowerShell。 建议的版本为1.0.2,但该任务将适用于版本0.9.8 和更高版本。 可以使用Azure PowerShell 安装程序 1.0.2来获取此。
此任务的 WinRM 先决条件是什么?
该任务使用 Windows 远程管理 (WinRM) HTTPS 协议将文件从存储 blob 容器复制到 Azure vm。 这要求在 Vm 上配置 WinRM HTTPS 服务,并安装适当的证书。
如果在创建 Vm 时未打开 WinRM HTTPS 端口,请执行以下步骤:
- 配置入站访问规则以允许每个 VM 的端口5986上的 HTTPS。
- 禁用 UAC 远程限制。
- 使用无需任何域部分的简单窗体 用户名 中的管理员级别登录,指定任务访问 vm 的凭据。
- 在运行自动化代理的计算机上安装证书。
- 如果你使用的是自签名证书,则设置该任务的 测试证书 参数。
我应该选择哪种类型的服务连接?
下表列出了与它们一起使用的存储帐户和服务连接。 若要确定存储帐户是否基于经典 api 或资源管理器 api,请登录到Azure 门户并浏览 (经典) 或存储帐户的存储帐户。
| 存储帐户类型 | TFS/TS 中的 Azure 服务连接 |
|---|---|
| 资源管理器 | Azure 资源管理器服务连接 |
| 经典 | 使用学校或工作帐户通过基于证书的身份验证或基于凭据的身份验证的 Azure 服务连接 |
对于 Azure 经典资源,请将 azure 服务连接类型与证书或基于凭据的身份验证配合使用。 如果你使用的是基于凭据的身份验证,请确保凭据适用于 学校或工作帐户。 不支持 Microsoft 帐户( joe@live.com 如和 joe@hotmail.com )。
对于 azure 资源管理器 vm,请使用azure 资源管理器服务连接类型。 有关 使用服务主体自动部署 Azure 资源组的详细信息,请参阅。
如果使用azure 资源管理器服务连接类型或使用基于证书的身份验证的azure服务连接类型,则该任务会自动筛选相应的经典存储帐户、较新的 Azure 资源管理器存储帐户和其他字段。 例如,资源组、云服务和虚拟机。
注意:目前,使用基于凭据的身份验证的 Azure 服务连接类型不会筛选存储、资源组或云服务以及虚拟机字段。
如何实现修复失败 "403:此请求无权使用此权限执行此操作"?
Azure DevOps 创建 Azure 服务连接并向其授权时,它会在订阅的 Active Directory 中创建应用注册。 此标识会自动添加 Contributor 到你选择授权的资源组中的所有资源。 若要将 blob 上传到存储帐户,则无法使用 Contributor 。 必须手动将角色分配Storage Blob Data Contributor 给应用注册标识。
你可以从现有的继承项中复制应用标识,就像你将在 "IAM" 窗格中看到的那样 Contributor ,可以在 UI 中 Add role assignment 明确搜索。 请注意,该标识将 不 会在下拉列表中列出,并且你将需要搜索其标识符。
如果资源组同时包含经典 vm 和资源管理器 vm,会发生什么情况呢?
如果指定的资源组同时包含 Azure 资源管理器和经典 vm,则目标 vm 集将取决于连接类型。 对于基于证书的连接和基于凭据的连接,仅在经典 Vm 上执行复制操作。 对于基于服务主体名称的连接,将仅在资源管理器 vm 上执行复制操作。
如何实现创建用于此任务的学校或工作帐户?
可以轻松地创建适合在服务连接中使用的帐户:
- 使用 Azure 门户在 Azure Active Directory 中创建新的用户帐户。
- 将 Azure Active Directory 用户帐户添加到 Azure 订阅中的共同管理员组。
- 利用此用户帐户登录到 Azure 门户,并更改密码。
- 在服务连接中使用此帐户的用户名和密码。 将使用此帐户处理部署。
需要使用代理吗?
至少需要一个代理才能运行生成或发布。
我遇到了问题。 如何对其进行故障排除?
请查看排查生成和发布问题。
我无法选择默认代理池,无法将生成或发布排队。 如何修复此问题?
请查看代理池。
我的 NuGet 推送任务失败,出现“错误: 无法获取本地颁发者证书”错误。 如何解决此问题?
可通过添加受信任的根证书来解决此问题。 可将环境变量 NODE_EXTRA_CA_CERTS=file 添加到生成代理,也可在管道中添加任务变量 NODE.EXTRA.CA.CERTS=file。 有关此变量的更多详细信息,请参阅 Node.js 文档。 有关在管道中设置变量的说明,请参阅在管道中设置变量。
我在本地使用 TFS,但没有看到其中某些功能。 为什么看不到?
其中某些功能仅在 Azure Pipelines 上可用,在本地尚不可用。 如果你已升级到最新版本的 TFS,则可在本地使用这些功能。