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

Azure Pipeline无法执行仓库deploy.sh脚本的路径问题解决

问题根因

两个异常现象本质是独立问题叠加导致:

  • CMD任务假绿:Windows CMD本身不会把「找不到目标文件」判定为执行错误,命令执行完默认返回0退出码,流水线只要拿到0退出码就会标记成功,和脚本有没有真的跑起来没有关系。
  • Bash任务报路径错:Bash解释器找不到目标脚本时会直接返回非0退出码,流水线直接标记失败,这反而是正常的错误提示,不是Bash任务本身有问题。
  • 核心路径问题:Azure Pipeline所有任务的默认执行基准目录是内置变量$(System.DefaultWorkingDirectory),也就是流水线拉取仓库代码后的根目录,写的相对路径没对齐这个基准、漏了代码拉取步骤、路径分隔符写错,都会导致找不到文件。
修正配置步骤
  • 先补全代码拉取步骤
    流水线第一步必须先拉取仓库代码,不然代理机器上根本不会存在deploy.sh文件:
    steps:
    - checkout: self
    
    这步执行完,Azure仓库里的所有文件都会同步到代理的$(System.DefaultWorkingDirectory)目录下:如果deploy.sh直接放在仓库根目录,全路径就是$(System.DefaultWorkingDirectory)/deploy.sh;如果放在仓库的scripts/deploy这类子文件夹里,补上对应子目录路径即可。
  • 弃用CMD任务跑shell脚本
    CMD是Windows原生命令行,本身不具备解析shell脚本的能力,就算路径写对了也会报脚本格式错误,shell脚本必须用对应解释器执行,不要用Windows命令行强行跑,直接用官方Bash任务执行.sh脚本即可。
  • 正确配置Bash任务
    推荐用内置变量拼路径,不要写硬编码的本地绝对路径,配置参考:
    # Linux代理必加,Windows代理可跳过:给脚本加可执行权限
    - task: Bash@3
      inputs:
        targetType: 'inline'
        script: 'chmod +x $(System.DefaultWorkingDirectory)/deploy.sh'
      displayName: '给脚本添加可执行权限'
    
    # 执行部署脚本
    - task: Bash@3
      inputs:
        filePath: '$(System.DefaultWorkingDirectory)/deploy.sh' # 替换为仓库里deploy.sh的实际相对路径
        workingDirectory: '$(System.DefaultWorkingDirectory)'
      displayName: '执行deploy.sh部署脚本'
    
    如果不确定脚本实际所在目录,可以在执行脚本前加排查步骤,把代理上的目录结构全打印出来对照找路径:
    - script: |
        pwd
        ls -R
      displayName: '打印目录结构排查路径'
    
常见踩坑
  • 路径分隔符统一用正斜杠/:不管是Windows还是Linux代理跑Bash任务,正斜杠都能正常识别,不要用Windows的反斜杠\,容易触发字符转义导致路径识别错误。
  • 不要随意修改任务的workingDirectory参数:改了之后相对路径的基准目录就会变化,新手阶段直接固定用$(System.DefaultWorkingDirectory)作为工作目录即可。
  • 如果脚本里有相对路径引用其他文件,所有路径都要以$(System.DefaultWorkingDirectory)为基准编写,不然会出现能找到deploy.sh但脚本内引用的其他文件找不到的问题。
  • 不要依赖CMD的默认退出码判断任务成功:如果后续必须用CMD跑任务,要手动加错误判断逻辑,比如文件不存在就主动执行exit 1返回非0码,避免流水线假绿。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 10:06:33