You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

GitLab CI多Job间传递Docker镜像失败,artifact无法找到

问题解决:GitLab CI制品上传警告与镜像推送失败

问题根源

  1. 目标镜像未生成:docker save apis_server执行前,若apis_server镜像未成功构建,会直接导致tar包文件缺失,GitLab无法找到可上传的制品。
  2. 路径与文件验证缺失:未对目录创建、文件生成结果做校验,无法提前发现命令执行失败的情况。

修复方案

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.24 16:16:03