Zero Width Space引发的BUG分析

正在马不停蹄的coding,突然接到sandy老师的请求支援,说site部署已经24个小时了,一直部署不成功。

心中一惊,难道CI/CD的pipeline出bug了,不可能吧,如果是,早炸锅了。

观察一下jenkins上以往的build job,发现是个例,心稍微放松一下。

###发现问题

我司是容器化的jenkins pipeline,每个ultra site 部署完成需要4个pod,首先以问题site的实例名,在整个部署cluster的namespace中 grep一把,想看看当前是什么状态,发现没有任何pod信息输出。

kubectl -n learn-deployments  get pods --show-all |grep submission-list-after

猜测应该是时间比较久了,经过重试一直不成功,被K8s 调度器delete掉了。

那么首先应该复现问题,我rebuild一下job,直接看到错误

submission-list-after-learn-postgres-9f56f79d9-fbxbj      1/1       Running            0          2h
submission-list-after-learn-tomcat-86cb76c85d-qv6nz       2/2       Running            0          2h
submission-list-after-ultra-5fcd59d9b4-gk95p              0/1       InvalidImageName   0          2h
submission-list-after-ultra-router-7cbf4c7875-48mp4       1/1       Running            0          2h

“InvalidImageName” 这么明显的问题,其实如果想看进一步的detail 错误信息,只需要一步

kubectl -n learn-deployments describe pods/submission-list-after-ultra-5fcd59d9b4-gk95p

Warning  InspectFailed          13s (x8 over 34s)  kubelet, ip-10-146-22-185.ec2.internal  Failed to apply default image tag "AWSACCOUNTID.dkr.ecr.us-east-1.amazonaws.com/learnci/feature/lrn-142928-submission-\u200blist-perf/docker-ultra-ui-3500.6.0-ci:1546_958929e6": couldn't parse image reference "AWSACCOUNTID.dkr.ecr.us-east-1.amazonaws.com/learnci/feature/lrn-142928-submission-\u200blist-perf/docker-ultra-ui-3500.6.0-ci:1546_958929e6": invalid reference format

看到了不速之客“\u200b”, 问题找到了,google一把

原来这货是U+200B,它还有个学名,叫做:Zero Width Space

##分析问题

什么地方引入了这个bug呢?

部署的时候,使用的image 是从远端的aws ecr上拉取的,不会有任何改变,说明生成的image name就出问题了。

回想创建image的pipelinehttps://bbjenkins.dev.bbpd.io/view/Learn/job/ultra/job/create-ultra-ui-images/

image name 是由branch name +version number 通过一定的算法生成的,现在是前半部分出现了问题,是输入branch name时引入的问题。

image 本身没有问题,re-run 同一个image 可以正常部署,所以应该是deploy的时候输入的branch name错误(rebuild功能或者复制、粘贴惹得祸),导致部署的job找image错误。

##解决问题

以后runjob 尽可能手动输入参数,rebuild可能会因前人的失误,带到坑里。

加强保护,使用branch_name/version/instance_name的地方都增加上去空格保护。

###经验教训

1,系统设计时,尽可能减少人为输入,否则容易不可控

2,用户输入参数为字符串类型时,例如instance_name,需要严格给出使用规范,比如长度,大小写,有无空格,数字,有效字符等。否则很可能引入BUG。

3,查问题,不能发散,必须紧扣细节,找到依据,不能想当然。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

马少芳

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值