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

如何捕获GitLab pipeline执行错误并传递给后续Job使用

GitLab CI捕获Docker推送错误的实现方案

你需要调整job1的脚本逻辑,避免docker push失败后直接终止后续命令执行,同时捕获错误输出存入artifact文件,修改后的完整配置如下:

调整后的job1配置

# Stage to pull and push image
job1:
  stage: job1
  allow_failure: true
  script:
    # Pull image and save success
    - docker pull ${SOURCE_IMAGEURI}:${TAG}
    # ... 其他原有执行步骤
    - docker tag ${SOURCE_IMAGEURI}:${TAG} ${TARGET_IMAGEURI}:${TAG} 
    
    # 捕获docker push的错误输出与执行状态
    # 将stderr重定向到日志文件,命令失败时标记失败状态,不终止脚本
    - docker push ${TARGET_IMAGEURI}:${TAG} 2> push_err.log || export PUSH_FAIL=1
    # 按执行结果写入不同信息到artifact文件
    - |
      if [ "${PUSH_FAIL}" = "1" ]; then
        echo "镜像推送失败,详细错误:" > curldata.txt
        cat push_err.log >> curldata.txt
        # 可精准匹配权限不足的错误场景,补充自定义提示
        if grep -q "denied: requested access to the resource is denied" push_err.log; then
          echo "错误原因:账号无目标镜像仓库推送权限,请检查权限配置" >> curldata.txt
        fi
      else
        echo "镜像推送成功" > curldata.txt
      fi
  artifacts:
    when: always
    paths:
      - curldata.txt

job2读取错误信息示例

job2:
  stage: job2
  script:
    # 直接读取job1传递的结果文件,用于后续通知逻辑
    - PUSH_MSG=$(cat curldata.txt)
    # 此处可替换为你需要的通知逻辑,比如发送邮件、企业微信、飞书消息等
    - echo "${PUSH_MSG}"
  when: always
  dependencies:
    - job1

原理解释

  • docker push命令后加2> push_err.log将标准错误输出重定向到日志文件,方便后续提取错误信息
  • 末尾加|| export PUSH_FAIL=1的作用是,当docker push执行失败时,不会触发脚本默认的「遇错退出」逻辑,而是给状态变量赋值,继续执行后续命令
  • 可通过grep匹配权限不足的特定错误关键字,给用户更精准的提示,无需用户自己排查原始错误日志

内容的提问来源于stack exchange,提问作者John Baltimore

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 17:24:05