记一次gitlab-ci始终构建失败的排查过程

问题

gitlab pipeline 的日志输出中可以看到,一旦执行到 docker login 之后,就会挂掉,报 Error: Cannot perform an interactive login from a non TTY device 这个错误。

docker login 报错

在UNIX的术语中,最简单的回答是:
终端(terminal)= tty =文本的输入输出环境
控制台(console)= 物理终端
shell = 命令行解释器

思路

这个时候就纳闷了,一天一夜没睡觉,就为了整合 gitlab cihelmk3s 做项目管理,这已经临近尾声了,怎么突然就报错了?之前运行了好几十次,都好好的。

检索一番之后,发现如果 docker login -u xxx -p 后面不跟密码的话,那么 docker 就会自动让用户输入密码,但是因为是在 gitlab runner 里运行的这条命令,自然没有 TTY 了,于是报错。

那么我明明写了 $DOCKER_PWD 这个变量,检查 repo 的设置里的 variables,也设置了相应的变量值,应该没啥问题啊?

这时候将 gitlab-ci.yaml 中的 CI_DEBUG_TRACE 值设置为 true ,再重新触发 pipeline,然后看日志:

image.png

果然没有 DOCKER_PWD 这个变量!

这下就更纳闷了,但是突然一想,设置 variables 的界面好像有个 protected 功能!之前随便点的玩了下。

而今天都在调式 ci/cd 的功能,把 develop 分支的提交记录搞的特别乱,所以刚才把 develop 分支取消了 protected ,然后合并提交之后 push -f 了一下。

image.png

这个 protected 功能,只要打开之后,非 protected 的分支触发的 pipeline ,就拿不到这个变量了!

解决

so,重新把 develop 分支设置成 protected,然后一切恢复正常。

你可能感兴趣的:(记一次gitlab-ci始终构建失败的排查过程)