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

Azure Pipelines中$(Build.SourcesDirectory)目录为空问题排查

问题根因

你使用的是deployment(部署)类型作业,而非Azure DevOps流水线的常规job类型。部署作业默认不会自动执行代码拉取操作,这就是$(Build.SourcesDirectory)目录为空的核心原因:路径变量本身没有问题,是作业没有主动把仓库代码拉取到该目录下。
此前配置可正常运行,一般是因为之前使用的是普通job,或者当时在部署作业里显式配置了代码拉取步骤,后续调整配置时遗漏了该部分。

修复方案

按需选择以下任意一种方案即可解决问题:

  • 方案1:保留现有deployment作业结构,在步骤最开头显式添加代码拉取步骤
    在deploy.steps的第一个位置加入checkout: self配置,修改后的步骤片段如下:
    deploy:
      steps:
        - checkout: self # 显式拉取当前关联的代码仓库内容到SourcesDirectory目录
        - task: CmdLine@2
          displayName: Debug
          inputs:
            script: |
              echo 'Build.SourcesDirectory'
              echo $(Build.SourcesDirectory)
              ls -l $(Build.SourcesDirectory)
    
  • 方案2:如果不需要用到部署作业专属的环境绑定、部署策略能力,直接将deployment作业替换为普通job类型
    普通job默认会自动拉取代码,无需额外配置checkout步骤,修改后的完整流水线配置如下:
    pool:
      vmImage: ubuntu-latest
    
    stages:
    - stage: Debug
      displayName: Debug
      jobs:
      - job: Debug # 替换原deployment类型为普通job
        displayName: Debug
        steps:
          - task: CmdLine@2
            displayName: Debug
            inputs:
              script: |
                echo 'Build.SourcesDirectory'
                echo $(Build.SourcesDirectory)
                ls -l $(Build.SourcesDirectory)
    
补充说明
  • 部署作业的设计定位是面向基础设施、应用发布的部署场景,默认只加载部署环境、部署生命周期相关的能力,不会自动执行代码拉取、构建类的前置操作,所有需要用到源码的场景都必须显式声明checkout步骤。
  • 如果流水线需要拉取多个关联仓库的代码,只需在checkout步骤中指定对应仓库名称即可,例如checkout: my-repo-name。

内容的提问来源于stack exchange,提问作者Lukasz Dynowski

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.14 16:15:48