复制文件任务

参数 说明
SourceFolder
源文件夹
(可选) 包含要复制的文件的文件夹。 如果将其留空,则从存储库的根文件夹进行复制 (与指定 $(Build.SourcesDirectory)) 。
如果生成在源目录之外生成项目,请指定 从为管道 $(Agent.BuildDirectory) 创建的目录中复制文件。
Contents
目录
(复制) 需要包含的文件路径。 支持多行匹配模式。
例如:
  • * 复制指定源文件夹中的所有文件
  • ** 复制指定源文件夹中的所有文件和所有子文件夹中的所有文件
  • **\bin\** 以递归性从任何 bin 文件夹复制所有文件

    模式用于仅匹配文件路径,而不匹配文件夹路径。 因此,应指定模式,例如 **\bin\**,而不是 **\bin。
    必须使用与生成代理类型匹配的路径分隔符。 例如, / 必须用于 Linux 代理。 下面显示了更多示例。
    默认值:30**
TargetFolder
目标文件夹
(目标) 或 UNC 路径文件将复制到的必需文件。 可以使用 变量
示例 :$ (build.artifactstagingdirectory)
CleanTargetFolder
清理目标文件夹
(可选) 复制前删除目标文件夹中的所有现有文件
默认值:30false
OverWrite
Overwrite
(可选) 替换目标文件夹中的现有文件
默认值:30false
flattenFolders
平展文件夹
(可选) 平展文件夹结构,将所有文件复制到指定的目标文件夹中
默认值:30false
preserveTimestamp
保留目标时间戳
(可选) 使用原始源文件,保留目标文件时间戳。
默认值:30false
retryCount
复制文件的重试计数
(可选) 指定复制文件的重试计数。 它可以帮助解决间歇性问题,例如远程主机上的 UNC 目标路径。
默认值:300
ignoreMakeDirErrors
忽略创建目标文件夹期间的错误
(可选) 这可以避免多个代理并行执行任务(具有一个目标文件夹)的问题。
默认值:30false

说明

如果没有匹配的文件,任务仍将报告成功。 如果目标中已存在匹配的文件,则任务将报告失败,除非 Overwrite 设置为 true。

示例

steps:
- task: CopyFiles@2
  inputs:
    contents: '_buildOutput/**'
    targetFolder: $(Build.ArtifactStagingDirectory)
- task: PublishBuildArtifacts@1
  inputs:
    pathToPublish: $(Build.ArtifactStagingDirectory)
    artifactName: MyBuildOutputs

示例

复制可执行文件和自述文件

目标

只想复制运行此 C# 控制台应用所需的自述文件和文件:

`-- ConsoleApplication1
    |-- ConsoleApplication1.sln
    |-- readme.txt
    `-- ClassLibrary1
        |-- ClassLibrary1.csproj
    `-- ClassLibrary2
        |-- ClassLibrary2.csproj
    `-- ConsoleApplication1
        |-- ConsoleApplication1.csproj

注意

ConsoleApplication1.sln 包含包含 .dll 和 .exe 文件的 bin 文件夹,请参阅以下结果,了解移动的内容!

在"变量"选项卡上, $(BuildConfiguration) 设置为 release

具有多个匹配模式的示例:

steps:
- task: CopyFiles@2
  displayName: 'Copy Files to: $(Build.ArtifactStagingDirectory)'
  inputs:
    Contents: |
      ConsoleApplication1\ConsoleApplication1\bin\**\*.exe
      ConsoleApplication1\ConsoleApplication1\bin\**\*.dll
      ConsoleApplication1\readme.txt
    TargetFolder: '$(Build.ArtifactStagingDirectory)'

OR 条件的示例:

steps:
- task: CopyFiles@2
  displayName: 'Copy Files to: $(Build.ArtifactStagingDirectory)'
  inputs:
    Contents: |
      ConsoleApplication1\ConsoleApplication1\bin\**\?(*.exe|*.dll)
      ConsoleApplication1\readme.txt
    TargetFolder: '$(Build.ArtifactStagingDirectory)'

具有 NOT 条件的示例:

steps:
- task: CopyFiles@2
  displayName: 'Copy Files to: $(Build.ArtifactStagingDirectory)'
  inputs:
    Contents: |
      ConsoleApplication1\**\bin\**\!(*.pdb|*.config)
      !ConsoleApplication1\**\ClassLibrary*\**
      ConsoleApplication1\readme.txt
    TargetFolder: '$(Build.ArtifactStagingDirectory)'

内容部分中具有变量的示例

- task: CopyFiles@2
  inputs:
    Contents: '$(Build.Repository.LocalPath)/**' 
    TargetFolder: '$(Build.ArtifactStagingDirectory)'

YAML 生成在 TFS 上尚不可用。

结果

这些文件将复制到暂存目录:

`-- ConsoleApplication1
    |-- readme.txt
    `-- ConsoleApplication1
        `-- bin
            `-- Release
                | -- ClassLibrary1.dll
                | -- ClassLibrary2.dll
                | -- ConsoleApplication1.exe

复制源目录中除 .git 文件夹之外的所有内容

具有多个匹配模式的示例:

steps:
- task: CopyFiles@2
  displayName: 'Copy Files to: $(Build.ArtifactStagingDirectory)'
  inputs:
    SourceFolder: '$(Build.SourcesDirectory)'
    Contents: |
      **/*
      !.git/**/*
    TargetFolder: '$(Build.ArtifactStagingDirectory)'

YAML 生成在 TFS 上尚不可用。

开源

此任务在 上是开源GitHub。 欢迎提供反馈和建议。

常见问题

在哪里可以详细了解文件匹配模式?

文件匹配模式参考

如何实现此任务发布项目?

请参阅Artifacts 中的Azure Pipelines。

问:发布项目时遇到问题。 如何查看详细日志?

为管道启用详细日志:

  1. 编辑管道并选择 "变量"
  2. 添加具有名称和值 System.Debug 的新变量 true
  3. 保存

问:我可以使用哪些变量?

$(Build.SourcesDirectory)$(Agent.BuildDirectory) 和 只是管道中可以使用的变量中的一些。 变量以表达式或 脚本 形式提供。

请参阅定义变量、预定义变量经典版本和项目变量,了解不同类型的变量。

问:任务允许我在 yaml 管道的部署作业中发布项目,但无法将其用于下游管道?

答:部署作业没有源分支的上下文,因此不适合发布项目。 它们主要用于使用项目。 解决方法是将逻辑隔离到单独的作业 (依赖于部署作业的) 。

需要使用代理吗?

至少需要一个代理才能运行生成或发布。

我遇到了问题。 如何对其进行故障排除?

请查看排查生成和发布问题

我无法选择默认代理池,无法将生成或发布排队。 如何修复此问题?

请查看代理池

我的 NuGet 推送任务失败,出现“错误: 无法获取本地颁发者证书”错误。 如何解决此问题?

可通过添加受信任的根证书来解决此问题。 可将环境变量 NODE_EXTRA_CA_CERTS=file 添加到生成代理,也可在管道中添加任务变量 NODE.EXTRA.CA.CERTS=file。 有关此变量的更多详细信息,请参阅 Node.js 文档。 有关在管道中设置变量的说明,请参阅在管道中设置变量

我在本地使用 TFS,但没有看到其中某些功能。 为什么看不到?

其中某些功能仅在 Azure Pipelines 上可用,在本地尚不可用。 如果你已升级到最新版本的 TFS,则可在本地使用这些功能。

Azure Pipelines |Azure DevOps Server 2020 |Azure DevOps Server 2019 |TFS 2018 - TFS 2015.3

使用此任务可以使用匹配模式将文件从源文件夹复制到目标文件夹。

注意

在 Microsoft Team Foundation Server (TFS) 2018 和更低版本中,生成和发布管道被称为“定义”,运行被称为“生成”,服务连接被称为“服务终结点”,阶段被称为“环境”,而作业被称为“阶段” 。

需求

YAML 代码片段

# Copy files
# Copy files from a source folder to a target folder using patterns matching file paths (not folder paths)
- task: CopyFiles@2
  inputs:
    #sourceFolder: # Optional
    #contents: '**' 
    targetFolder: 
    #cleanTargetFolder: false # Optional
    #overWrite: false # Optional
    #flattenFolders: false # Optional
    #preserveTimestamp: false # Optional
    #retryCount: 0 # Optional
    #ignoreMakeDirErrors: false # Optional

参数