Azure DevOps Release阶段Bash脚本无法读取dbfs_api.json文件问题
问题产生原因
- Release流水线默认未拉取代码仓库内容:Azure DevOps的Build流水线默认会自动拉取关联仓库的源码,但Release流水线默认不会执行拉取源码的操作,你需要用到的conf文件夹根本没有被同步到流水线的运行节点上,自然找不到对应文件。
- 工作目录不匹配:就算你配置了拉取源码,如果你没有将bash脚本的执行工作目录切换到源码拉取的目标根目录,直接用相对路径
conf/dbfs_api.json也会因为当前执行目录不对找不到文件。 - 路径转义问题:从报错的路径
D:ar1a/conf/dbfs_api.json可以看出,Windows节点默认的路径分隔符反斜杠\在bash环境中被当成了转义符,原本的路径D:\a\r1\a被转义后丢失了分隔符变成了D:ar1a,也会导致路径识别错误。
解决方案
- 给Release流水线添加拉取源码的步骤:
在Release的阶段编辑页,添加「获取源代码」任务,关联你存放conf文件夹的代码仓库,配置好对应的分支即可,执行后源码会被拉取到Release的默认工作目录下。 - 显式指定脚本的工作目录或者使用预制环境变量定位源码路径:
Azure DevOps提供了预制环境变量$(Build.SourcesDirectory)指向拉取到的源码根目录,你可以在bash脚本中先切换到该目录,或者直接用变量拼接文件路径,修改后的脚本参考:
- bash: | echo 'Hello world' # 先切换到源码根目录 cd $(Build.SourcesDirectory) curl -X POST -H "Authorization: Bearer dapiXXXXXXXX" -d @conf/dbfs_api.json https://adb-YYYYYYYY.X.azuredatabricks.net/api/2.0/jobs/create > file.json displayName: 'Bash Script'
- 如果运行节点是Windows环境,建议将路径分隔符统一换成正斜杠
/,或者给路径加上引号避免转义问题。
内容的提问来源于stack exchange,提问作者scalacode
相关产品推荐
相关产品推荐

