如何正确使用negative globbing清理构建构件中的多余无效文件
解决方案
仅调整CopyFiles@2任务的glob规则即可解决多余文件问题,无需额外PowerShell任务:
核心问题分析
- 第二个复制任务的glob规则存在逻辑错误:当前
!(packages.config|phantomjs-license.txt)规则会匹配Project123目录下除这两个文件外的所有内容,大量项目源码、编译中间文件都是通过该规则被误复制到构件目录的 - 第一个复制任务的
bin/**全量匹配会将目录下所有pdb调试文件、xml注释文件、无用依赖dll一并复制,需要补充排除规则
修改后YAML配置
steps: - task: CopyFiles@2 displayName: 'Copy 发布站点文件到构件 staging 目录' inputs: SourceFolder: '$(Build.ArtifactStagingDirectory)/_PublishedWebsites/Project123' Contents: | assets/** bin/** # 排除bin目录下的调试文件、注释文件,可按需添加无用dll的排除规则 !bin/**/*.pdb !bin/**/*.xml Content/** Scripts/** Views/** *.config *.asax *.ico *.txt # 可按需添加根目录下多余文件的排除规则,如!*.xml TargetFolder: '$(Build.ArtifactStagingDirectory)' condition: succeededOrFailed() steps: - task: CopyFiles@2 displayName: '复制 Bundles 目录到构件 staging 目录' inputs: SourceFolder: Project123 Contents: | # 仅匹配需要的Bundles目录,不要写全局匹配规则 Bundles/** # 如果你确实需要根目录下除指定txt外的其他文件,再在此处单独添加包含规则,不要用全局!规则 TargetFolder: '$(Build.ArtifactStagingDirectory)' steps: - task: ArchiveFiles@2 displayName: 'Archive $(Build.ArtifactStagingDirectory)' inputs: rootFolderOrFile: '$(Build.ArtifactStagingDirectory)' includeRootFolder: false verbose: true steps: - task: PublishBuildArtifacts@1 displayName: 'Publish Artifact: Release' inputs: ArtifactName: Release
补充说明
Azure DevOps的glob规则遵循从上到下顺序匹配的逻辑,排除规则必须放在对应包含规则的之后才能生效。如果还有其他特定后缀的多余文件需要排除,按照上述格式新增!路径/规则即可。
内容的提问来源于stack exchange,提问作者Cataster
相关产品推荐
相关产品推荐

