You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Azure Pipeline CopyFiles@2任务通配符匹配异常与子目录遍历问题

问题原因

两个异常均由Azure DevOps CopyFiles@2 任务内置的minimatch通配符默认规则导致:

  • 遍历无关子目录的原因:当contents参数使用不带路径前缀的通配符时,任务会默认将规则解析为**/Setup*.sql,其中**代表递归遍历所有层级子目录,因此会扫描.git等无关目录,导致任务耗时大幅增加。而此前使用精确文件名README.MD时,任务会优先在源目录根路径查找,匹配到对应文件后就停止扫描,不会触发递归遍历,因此运行正常。
  • 通配符匹配结果不符合预期的原因:默认递归匹配规则下,任务优先级会向子目录匹配偏移,根目录下无额外字符的Setup.sql会被低优先级处理,甚至在大目录扫描时被遗漏,而子目录或名称带额外字符的SetupSecurity.sql反而会被优先匹配到。
解决方案

如果需要匹配的SQL文件都存放在源目录根路径下,修改contents参数添加根路径前缀/,关闭递归扫描即可:

- task: CopyFiles@2
  condition: eq(variables.publishDeployables, true)
  displayName: 'Add SQL to output'
  inputs:
    sourceFolder: '$(Build.SourcesDirectory)'
    contents: '/Setup*.sql'
    targetFolder: '$(Build.ArtifactStagingDirectory)'

如果需要同时匹配指定子目录下的SQL文件,可手动添加对应路径规则,同时排除无关目录即可:

- task: CopyFiles@2
  condition: eq(variables.publishDeployables, true)
  displayName: 'Add SQL to output'
  inputs:
    sourceFolder: '$(Build.SourcesDirectory)'
    contents: |
      /Setup*.sql
      /subdir/**/Setup*.sql
      !/.git/**
    targetFolder: '$(Build.ArtifactStagingDirectory)'

内容的提问来源于stack exchange,提问作者Richard Barraclough

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 22:45:06