Azure DevOps Pipeline如何正确引用仓库内Python脚本的路径
解决方案
问题根因
你遇到的路径不存在报错,核心是对Azure DevOps的源码检出目录规则理解有误:默认情况下,Azure DevOps会将触发管道的对应仓库的所有内容直接拉取到$(Build.SourcesDirectory)根目录下,不会额外生成和仓库名同名的文件夹,所以你路径中多加的/vg层级实际不存在,最终触发报错。
分步修正方法
- 首先可添加目录打印调试步骤(推荐排查路径问题时优先使用),在所有执行Python脚本的步骤之前加入以下配置,运行后可直接在日志中查看所有文件的真实路径:
- bash: ls -R $(Build.SourcesDirectory) displayName: 打印源码目录结构
- 情况1:Python脚本和当前管道YAML文件都存储在
vg仓库中,且main.py放在vg仓库的根目录
直接删除路径中的/vg层级即可,修正后的完整配置如下:
steps: # 可选的调试步骤 - bash: ls -R $(Build.SourcesDirectory) displayName: 打印源码目录结构 - task: PythonScript@0 inputs: scriptSource: 'filePath' scriptPath: $(Build.SourcesDirectory)/main.py arguments: $(file_path) $(pat) $(organization) $(project) $(vg_name) - bash: python $(Build.SourcesDirectory)/main.py # 若poc为其他仓库脚本,参考对应规则调整路径即可 # - script: python $(Build.SourcesDirectory)/main.py
- 情况2:
vg仓库是管道执行时额外检出的非触发仓库
需要先在steps最开头显式配置多仓库检出规则,指定检出路径为vg,原有路径配置即可正常生效,示例配置如下:
resources: repositories: - repository: vg type: git name: 你的实际项目名/vg # 替换为真实的项目/仓库名称 ref: main # 替换为你需要拉取的分支名 steps: - checkout: self # 若不需要拉取管道所在的当前仓库可删除此行 - checkout: vg path: 'vg' # 指定将vg仓库的内容检出到$(Build.SourcesDirectory)/vg目录下 - task: PythonScript@0 inputs: scriptSource: 'filePath' scriptPath: $(Build.SourcesDirectory)/vg/main.py arguments: $(file_path) $(pat) $(organization) $(project) $(vg_name) - bash: python $(Build.SourcesDirectory)/vg/main.py
内容的提问来源于stack exchange,提问作者trujboista
相关产品推荐
相关产品推荐

