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

YAML流水线报错:模板文件匹配目录而非文件问题求助

问题:Azure DevOps流水线部署报错“Template file pattern matches a directory instead of a file”

我遇到以下错误,查阅相关问题后仍未解决:

Error: Template file pattern matches a directory instead of a file: /home/vsts/work/1/s

我的YAML流水线文件如下:

trigger:
  branches:
    include:
      - deploy-dev
      - adf_publish

resources:
  repositories:
    - repository: CustodianDailyPipelines
      type: git
      name: 'CustodianDailyPipelines'
      ref: adf_publish

variables:
  workingDir: '$(Build.SourcesDirectory)'
  azureSubscription: 
  azureRMConnection: 
  resourceGroupDev: 'Dev'
  resourceGroupTest: 'Test'
  resourceGroupProd: 'Prod'
  sourceDataFactory: ''
  deployedDataFactory: ''
  region: 'westeurope'
  artifactName: 'arm-templates-artifact'
  vmImageName: 'ubuntu-latest'

stages:
- stage: Publish
  displayName: Publish
  jobs:
    - job: PublishJob
      displayName: Copy and Publish Artifacts
      pool:
        vmImage: $(vmImageName)
      steps:
        - checkout: self
        - checkout: CustodianDailyPipelines
          path: s/CustodianDailyPipelines
        - script: ls -l $(workingDir)/CustodianDailyPipelines
          displayName: 'List Source Directory Contents'
        - task: CopyFiles@2
          displayName: Copy files
          inputs:
            SourceFolder: '$(workingDir)/CustodianDailyPipelines/OstricaPipelines'
            Contents: '**/*.json'
            TargetFolder: '$(Build.ArtifactStagingDirectory)/ArmTemplates'
        - task: PublishBuildArtifacts@1
          displayName: Publish build artifacts
          inputs:
            PathtoPublish: '$(Build.ArtifactStagingDirectory)/ArmTemplates'
            ArtifactName: '$(artifactName)'
            PublishLocation: 'Container'

- stage: DeployDEV
  displayName: Deploy DEV stage
  condition: succeeded()
  jobs:
    - deployment: Deploy
      displayName: Deploy to DEV stage
      environment: 'development'
      pool:
        vmImage: $(vmImageName)
      strategy:
        runOnce:
          deploy:
            steps:
              - checkout: self
              - checkout: CustodianDailyPipelines
                path: a/CustodianDailyPipelines
              - download: none
              - task: DownloadPipelineArtifact@2
                inputs:
                  buildType: 'current'
                  artifactName: '$(artifactName)'
                  targetPath: '$(Pipeline.Workspace)/$(artifactName)'
              - script: |
                  echo "Listing all files in the artifact directory:"
                  ls -R $(Pipeline.Workspace)/$(artifactName)
                displayName: 'List all files in artifact directory'
              - script: |
                  echo "Contents of ARMTemplateForFactory.json:"
                  cat $(Pipeline.Workspace)/$(artifactName)/ARMTemplateForFactory.json
                  echo "Contents of ARMTemplateParametersForFactory.json:"
                  cat $(Pipeline.Workspace)/$(artifactName)/ARMTemplateParametersForFactory.json
                displayName: 'Verify ARM Templates'
              - task: AzureResourceManagerTemplateDeployment@3
                inputs:
                  deploymentScope: 'Resource Group'
                  azureResourceManagerConnection: $(azureRMConnection)
                  subscriptionId: $(azureSubscription)
                  action: 'Create Or Update Resource Group'
                  resourceGroupName: $(resourceGroupDev)
                  location: $(region)
                  templateLocation: 'Linked artifact'
                  csmFileLink: '$(Pipeline.Workspace)/$(artifactName)/ARMTemplateForFactory.json'
                  csmParametersFileLink: '$(Pipeline.Workspace)/$(artifactName)/ARMTemplateParametersForFactory.json'
                  overrideParameters: '-dataFactoryName $(deployedDataFactory) -environment development'
                  deploymentMode: 'Incremental'

分支说明

  • adf_publish:用于提取数据工厂的ARM JSON模板
  • deploy-dev:基于主分支的特性分支,包含所有ADF资源及YAML流水线文件

问题分析与修复方案

核心原因

错误源于AzureResourceManagerTemplateDeployment@3任务参数配置错误:

  • 使用了csmFileLink参数(用于指定远程URL),但实际传入的是本地文件路径
  • templateLocation参数与文件路径类型不匹配

具体修复步骤

  1. 修正部署任务参数
    将AzureResourceManagerTemplateDeployment@3任务的参数改为本地文件模式,替换csmFileLink为csmFile,并调整templateLocation:

    - task: AzureResourceManagerTemplateDeployment@3
      inputs:
        deploymentScope: 'Resource Group'
        azureResourceManagerConnection: $(azureRMConnection)
        subscriptionId: $(azureSubscription)
        action: 'Create Or Update Resource Group'
        resourceGroupName: $(resourceGroupDev)
        location: $(region)
        templateLocation: 'Local file'
        csmFile: '$(Pipeline.Workspace)/$(artifactName)/ARMTemplateForFactory.json'
        csmParametersFile: '$(Pipeline.Workspace)/$(artifactName)/ARMTemplateParametersForFactory.json'
        overrideParameters: '-dataFactoryName $(deployedDataFactory) -environment development'
        deploymentMode: 'Incremental'
    
  2. 移除冗余的Checkout步骤
    部署阶段无需再次拉取代码仓库,删除以下步骤避免路径干扰:

    # 删除这两行
    - checkout: self
    - checkout: CustodianDailyPipelines
      path: a/CustodianDailyPipelines
    
  3. 验证文件路径准确性
    保留现有的目录列表脚本,确认下载的工件中确实包含目标JSON文件,路径与配置一致。若文件不存在,需检查Publish阶段的CopyFiles@2任务:

    • 确认SourceFolder路径是否正确指向包含ARM模板的目录
    • 添加脚本打印源目录结构,排查文件是否存在:
      - script: |
          echo "Source directory structure:"
          ls -R $(workingDir)/CustodianDailyPipelines/OstricaPipelines
        displayName: 'Check Source Template Files'
      

内容的提问来源于stack exchange,提问作者Αθανάσιος Σουλιώτης

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 16:30:11