如何通过Shell从Bitbucket仓库执行docker load并解决Bamboo流水线报错
问题根因
你当前遇到的第一个报错是tar文件路径拼接错误,同时脚本中还存在docker tag命令参数缺失的隐藏问题,具体修复方案如下:
1. 修复tar文件加载路径
你Bitbucket中ifhc仓库的tar文件路径是/front-end/aia-presales-frontend-sit.tar,Bamboo将仓库代码检出到工作目录后,仓库根目录内容直接对应工作目录根目录,不需要额外拼接/ifhc前缀。
将原来的加载命令:
docker image load -i ${bamboo.build.working.directory}/ifhc/front-end/aia-presales-frontend-sit.tar
修改为:
docker image load -i ${bamboo.build.working.directory}/front-end/aia-presales-frontend-sit.tar
2. 补充路径调试逻辑(可选,用于排查其他路径问题)
如果你修改路径后仍然报错,可以在脚本set -e -x行后新增以下命令,打印实际工作目录结构确认文件位置:
# 打印当前工作目录 pwd # 递归打印工作目录下所有文件 ls -R ${bamboo.build.working.directory}
3. 修复docker tag命令缺失参数问题
当前脚本中的docker tag命令只写了目标镜像名,缺少源镜像参数,会执行失败:
# 错误写法:缺少源镜像参数 docker tag ${bamboo.acr_repository}/frontend:v${bamboo.buildNumber}
你需要先确认tar包加载后生成的源镜像名称/标签,可在docker load命令后新增docker images打印加载后的镜像列表,假设加载后的源镜像是frontend:latest,修改为:
# 示例:将源镜像frontend:latest 重命名为ACR目标镜像 docker tag frontend:latest ${bamboo.acr_repository}/frontend:v${bamboo.buildNumber}
其他排查点
- 确认Bamboo检出任务没有配置稀疏检出,过滤掉了tar文件
- 如果tar文件是通过Bitbucket LFS存储的,需要在Bamboo检出任务中开启LFS拉取配置,否则拉取到的只是指针文件,无法正常加载
- 确认Bamboo执行用户对工作目录下的tar文件有读取权限
内容的提问来源于stack exchange,提问作者Adam Network
相关产品推荐
相关产品推荐

