CopyFiles@2 - 复制文件 v2 任务

使用此任务可以使用匹配模式将文件从源文件夹复制到目标文件夹。 (匹配模式将仅匹配文件路径,而不是文件夹路径)。

语法

# Copy files v2
# Copy files from a source folder to a target folder using patterns matching file paths (not folder paths).
- task: CopyFiles@2
  inputs:
    #SourceFolder: # string. Source Folder. 
    Contents: '**' # string. Required. Contents. Default: **.
    TargetFolder: # string. Required. Target Folder. 
  # Advanced
    #CleanTargetFolder: false # boolean. Clean Target Folder. Default: false.
    #OverWrite: false # boolean. Overwrite. Default: false.
    #flattenFolders: false # boolean. Flatten Folders. Default: false.
    #preserveTimestamp: false # boolean. Preserve Target Timestamp. Default: false.
    #retryCount: '0' # string. Retry count to copy the file. Default: 0.
    #delayBetweenRetries: '1000' # string. Delay between two retries. Default: 1000.
    #ignoreMakeDirErrors: false # boolean. Ignore errors during creation of target folder. Default: false.
# Copy files v2
# Copy files from a source folder to a target folder using patterns matching file paths (not folder paths).
- task: CopyFiles@2
  inputs:
    #SourceFolder: # string. Source Folder. 
    Contents: '**' # string. Required. Contents. Default: **.
    TargetFolder: # string. Required. Target Folder. 
  # Advanced
    #CleanTargetFolder: false # boolean. Clean Target Folder. Default: false.
    #OverWrite: false # boolean. Overwrite. Default: false.
    #flattenFolders: false # boolean. Flatten Folders. Default: false.
    #preserveTimestamp: false # boolean. Preserve Target Timestamp. Default: false.

输入

SourceFolder - 源文件夹
string

可选。 包含要复制的文件的文件夹。 如果该文件夹为空,则任务会从存储库的根文件夹中复制文件,就像指定了 $(Build.SourcesDirectory) 一样。

如果生成在源目录之外生成项目,请指定 $(Agent.BuildDirectory) 从为管道创建的目录中复制文件。


Contents - 内容
string。 必填。 默认值:**

要包含在副本中的文件路径。 此字符串支持多行匹配模式。

例如:

  • * 复制指定源文件夹中的所有文件。
  • ** 复制指定源文件夹中的所有文件以及所有子文件夹中的所有文件。
  • **\bin\** 从任何 bin 文件夹中以递归方式复制所有文件。

该模式仅用于匹配文件路径,而不是文件夹路径。 指定模式,例如 **\bin\** 而不是 **\bin

[] 中包装特殊字符可用于转义文件名中的文本 glob 字符。 例如,文本文件名 hello[a-z] 可以转义为 hello[[]a-z]。 有关详细信息,请参阅 文件匹配模式参考

使用与生成代理类型匹配的路径分隔符。 例如,/ 必须用于 Linux 代理。 下面显示了更多示例。


TargetFolder - 目标文件夹
string。 必填。

将包含复制文件的目标文件夹或 UNC 路径。 可以使用 变量。 示例:$(build.artifactstagingdirectory)


CleanTargetFolder - 清理目标文件夹
boolean。 默认值:false

可选。 在复制过程之前,删除目标文件夹中的所有现有文件。


OverWrite - 覆盖
boolean。 默认值:false

可选。 替换目标文件夹中的现有文件。


flattenFolders - 平展文件夹
boolean。 默认值:false

可选。 平展文件夹结构并将所有文件复制到指定的目标文件夹中。


preserveTimestamp - 保留目标时间戳
boolean。 默认值:false

使用原始源文件保留目标文件时间戳。


retryCount - 重试计数以复制文件
string。 默认值:0

指定复制文件的重试计数。 此字符串对于间歇性问题(如远程主机上的 UNC 目标路径)非常有用。


delayBetweenRetries - 两次重试之间的延迟。
string。 默认值:1000

指定两次重试之间的延迟。 此字符串对于间歇性问题(如远程主机上的 UNC 目标路径)非常有用。


ignoreMakeDirErrors - 忽略创建目标文件夹期间的错误。
boolean。 默认值:false

忽略在创建目标文件夹期间发生的错误。 此字符串可用于避免一个目标文件夹中的多个代理并行执行任务的问题。


任务控制选项

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

输出变量

没有。

注解

如果没有文件匹配,该任务仍将报告成功。

  • 如果 Overwrite 目标 false 文件夹中已存在匹配的文件,则任务不会报告失败,但会记录该文件已存在并跳过它。
  • 如果 Overwritetrue 并且目标文件夹中已存在匹配的文件,则匹配的文件将被覆盖。

例子

将文件复制到构件暂存目录并发布

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 文件夹,请参阅下面的结果以查看移动的内容!

在 Variables 选项卡上, $(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)'

结果

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

`-- 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)'

要求

要求 DESCRIPTION
管道类型 YAML,经典生成
运行时间 代理,DeploymentGroup
要求 没有
功能 此任务不满足作业中后续任务的任何要求。
命令限制 此任务使用以下 命令限制运行: 受限
Settable 变量 此任务有权 设置以下变量:禁用设置变量
代理版本 2.182.1 或更高版本
任务类别 效用
要求 DESCRIPTION
管道类型 YAML,经典生成
运行时间 代理,DeploymentGroup
要求 没有
功能 此任务不满足作业中后续任务的任何要求。
命令限制 任意
Settable 变量 任意
代理版本 1.91.0 或更高版本
任务类别 效用

另请参阅