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

Jenkins流水线中Docker登录失败时Job未终止问题求助

解决Jenkins流水线中Docker登录失败后未终止的问题

嘿,我刚好碰到过类似的问题!你的Jenkins流水线在docker login执行失败后还继续往下跑,主要是因为shell命令的错误处理没到位,或者Jenkins没正确捕获失败的退出码。给你几个靠谱的解决办法:

1. 先检查Makefile里的login目标是不是吞了错误码

你得看看tomcat目录下的Makefile里的login规则,是不是偷偷加了|| true这类东西?比如:

login:
    sudo docker login -u **** -p "****" csf-docker-candidate.repo.lab.pl.alcatel-lucent.com || true

要是这么写的话,哪怕docker login失败,make login都会返回0,后面的&& make push照样执行,流水线当然不会终止。你得把|| true删掉,让make login直接传递docker login的退出码:

login:
    sudo docker login -u $(USER) -p $(PASSWORD) csf-docker-candidate.repo.lab.pl.alcatel-lucent.com

2. 给shell脚本加上严格错误检查

在你流水线的shell命令开头加个set -e,这玩意儿会让shell碰到第一个非零退出码的命令就立刻终止,Jenkins也会马上标记这个Stage失败:

stage('Push Docker Images') {
    steps {
        sh '''
            set -e
            make push BUILD_ID=733
            for i in tomcat ; do cd $i ; make login && make push TAG=latest && make push ; cd - ; done
        '''
    }
}

这是最简单直接的办法,我自己平时都这么用。

3. 手动捕获登录失败并主动终止

如果你想加个自定义提示再终止,可以修改循环里的命令,主动检查make login的结果:

for i in tomcat ; do 
    cd $i 
    if ! make login; then
        echo "糟了!$i 镜像的Docker登录失败,流水线终止!"
        exit 1
    fi
    make push TAG=latest && make push 
    cd - 
done

这样只要登录失败,脚本就会主动输出错误信息然后exit 1,Jenkins肯定会停下来。

4. 确认Jenkins的错误捕获设置

有时候Jenkins的Execute shell步骤可能会忽略错误,如果你是用可视化配置的话,记得勾选**"如果任何命令以非零状态退出则构建失败"**;要是用流水线脚本,别给sh步骤加returnStatus: true参数(默认是false,会让失败的命令终止流水线)。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 07:45:49