GitLab CI多Job间传递Docker镜像失败,artifact无法找到
问题解决:GitLab CI制品上传警告与镜像推送失败
问题根源
- 目标镜像未生成:
docker save apis_server执行前,若apis_server镜像未成功构建,会直接导致tar包文件缺失,GitLab无法找到可上传的制品。 - 路径与文件验证缺失:未对目录创建、文件生成结果做校验,无法提前发现命令执行失败的情况。
修复方案
1. 完善Build阶段的镜像构建与校验
在build_image任务中补充镜像构建逻辑,添加多步验证确保文件生成:
stages: - build - push build_image: stage: build image: docker services: - docker:19.03.12-dind script: # 执行镜像构建(替换为你的实际构建命令) - docker build -t apis_server . # 验证镜像是否存在 - docker images | grep -q apis_server || { echo "镜像apis_server构建失败"; exit 1; } # 创建目录(-p避免目录已存在时报错) - mkdir -p image # 保存镜像到tar包 - docker save apis_server > image/apis_server.tar # 验证tar包是否生成且非空 - ls -la image/ - test -s image/apis_server.tar || { echo "tar包生成失败或为空"; exit 1; } artifacts: paths: - image/ expire_in: 1h # 可选:设置制品过期时间,节省存储空间 push_image: stage: push image: docker services: - docker:19.03.12-dind before_script: - apk add --no-cache python3 py3-pip && pip3 install --upgrade pip && pip3 install --no-cache-dir awscli script: # 先验证制品是否正确下载 - ls -la - test -d image && ls -la image/ || { echo "制品目录不存在"; exit 1; } - docker load -i image/apis_server.tar - docker images # 补充ECR认证与推送逻辑(替换为你的实际配置) - aws ecr get-login-password --region <你的AWS区域> | docker login --username AWS --password-stdin <你的ECR仓库URI> - docker tag apis_server:latest <你的ECR仓库URI>:latest - docker push <你的ECR仓库URI>:latest
2. 额外排查点
- 查看Build阶段完整日志,确认
docker build是否有报错(比如Dockerfile语法错误、依赖拉取失败)。 - 检查GitLab Runner配置:确保使用
docker或docker+machine执行器,工作目录权限配置正常(默认配置无需修改)。
内容的提问来源于stack exchange,提问作者Øystein Seel
相关产品推荐
相关产品推荐

