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
相关产品推荐
相关产品推荐

