Bitbucket Pipeline跨步骤传递Docker镜像tar包报错:文件不存在
问题描述
在Bitbucket Pipeline中已配置所有变量,成功构建Docker镜像并保存为.tar文件,但在后续步骤尝试将该tar包上传到指定位置时,出现错误提示“File Application.tar doesn't exist”。请问如何将构建生成的Docker镜像tar包复制到新位置?
现有Pipeline配置
preview: - step: name: Build Docker image for preview branch and save as .tar caches: - docker size: 2x #2x memory flag services: - docker script: - echo "Building Docker image for preview branch..." - docker build -f ./src/API/Dockerfile -t $BITBUCKET_REPO_SLUG . - docker save -o $BITBUCKET_REPO_SLUG.tar $BITBUCKET_REPO_SLUG - step: name: Upload Docker image as artifact script: - pipe: atlassian/bitbucket-upload-file:0.7.1 variables: BITBUCKET_USERNAME: $BITBUCKET_USERNAME BITBUCKET_APP_PASSWORD: $BITBUCKET_APP_PASSWORD FILENAME: "$BITBUCKET_REPO_SLUG.tar" DIRECTORY: "downloads"
报错信息
Status: Downloaded newer image for bitbucketpipelines/bitbucket-upload-file:0.7.1 INFO: Executing the pipe... ✖ File Application.tar doesn't exist.
问题原因
Bitbucket Pipeline的每个step运行在独立容器中,默认不共享文件系统。第一个step生成的$BITBUCKET_REPO_SLUG.tar仅存在于自身容器内,后续step无法直接访问,因此触发文件不存在的报错。
解决方案
在第一个step中添加artifacts配置,将生成的tar包标记为工件,让Bitbucket自动把文件传递到后续step中。
修改后的完整Pipeline配置
preview: - step: name: Build Docker image for preview branch and save as .tar caches: - docker size: 2x #2x memory flag services: - docker script: - echo "Building Docker image for preview branch..." - docker build -f ./src/API/Dockerfile -t $BITBUCKET_REPO_SLUG . - docker save -o $BITBUCKET_REPO_SLUG.tar $BITBUCKET_REPO_SLUG # 新增artifacts配置,指定需要传递的文件 artifacts: - $BITBUCKET_REPO_SLUG.tar - step: name: Upload Docker image as artifact script: - pipe: atlassian/bitbucket-upload-file:0.7.1 variables: BITBUCKET_USERNAME: $BITBUCKET_USERNAME BITBUCKET_APP_PASSWORD: $BITBUCKET_APP_PASSWORD FILENAME: "$BITBUCKET_REPO_SLUG.tar" DIRECTORY: "downloads"
补充说明
- artifacts支持通配符,如需传递多个tar包可写
- *.tar - 确保artifacts路径与文件生成路径一致,当前文件在工作目录生成,直接写文件名即可;若文件在子目录,需填写完整路径(如
- ./build/*.tar)
内容的提问来源于stack exchange,提问作者Haezer89
相关产品推荐
相关产品推荐

