使用此任务可以使用匹配模式将文件从源文件夹复制到目标文件夹。 (匹配模式将仅匹配文件路径,而不是文件夹路径)。
语法
# 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
文件夹中已存在匹配的文件,则任务不会报告失败,但会记录该文件已存在并跳过它。 - 如果
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 文件夹,请参阅下面的结果以查看移动的内容!
在 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 |
要求 | 没有 |
功能 | 此任务不满足作业中后续任务的任何要求。 |
命令限制 | 此任务使用以下 命令限制运行: 受限 |
|
此任务有权 设置以下变量:禁用设置变量 |
代理版本 | 2.182.1 或更高版本 |
任务类别 | 效用 |
要求 | DESCRIPTION |
---|---|
管道类型 | YAML,经典生成 |
运行时间 | 代理,DeploymentGroup |
要求 | 没有 |
功能 | 此任务不满足作业中后续任务的任何要求。 |
命令限制 | 任意 |
|
任意 |
代理版本 | 1.91.0 或更高版本 |
任务类别 | 效用 |
另请参阅
- 文件匹配模式参考
- 如何使用此任务发布项目
- 了解如何使用 详细日志 进行 故障排除。