• 记一次因jenkins迁移由于imagePullPolicy策略而导致发布内容不是最新的小问题


    1.背景

      由于公司jenkins需要迁移到腾讯云,所以进行jenkins的迁移,jenkins迁移的过程不在描述,由于使用的yum安装,截止2022年4月1日时,jenkins老版本自动安装很多默认插件在国内安装失败,个人也不想去一个一个去下载安装,于是将jenkins升级到了最新版本;(jenkins版本2.338-1.1,jenkins版本在这个文档这里其实不重要,只是做个记录)

      后面迁移完jenkins的job文件夹,虽然历史信息以及版本号都做了保留,但是只要更改配置文件就会出错,觉得没有必要去修复这个错误,于是便新建任务重新发布,便出现了以下问题:

      不管状态发布的多么正常,但是最新的程序代码一直无法展示,出现的一直是很久之前的程序代码。(具体的代码内容就不展示了)

      于是有了以下排错的过程:

     

    2.排错过程

      由于这里使用是jenkins完成ci/cd部分,于是排查以下流程。

    1. 检查源站git上的代码是否正常。 (正常)
    2. 检查构建的镜像内的代码是否正常。 (正常)
    3. 检查jenkins的工作目录的job是否正常,害怕有缓存或者什么不确定因素。 (正常)
    4. 检查运行中pod 容器的运行代码 (异常,为老代码)

      参考之前的博客<jenkins-k8s-Class not found io.kubernetes.client.openapi.models.V1Service报错 >,以为是降级了kubernetes cd插件的问题而出现的bug,可能与新版本不兼容。

      后面突然想到,负责项目的小伙子会不会重新创建job,最终导致镜像名称以及tag重复,而k8s的镜像拉取策略是‘IfNotPresent’,于是查看了pod的yaml文件,再次登录k8s中运行pod的node节点,果然,当前版本号构建次数为6,而该任务在之前的jenkins已经发布了42次。意思就是说在这42次之内,都不可能更新到最新代码。因为镜像tag重复了,又因为k8s镜像拉取策略,本地如果有镜像,那么就不去仓库去拉取最新镜像。在连续点击40次之后,代码才能显示最新。于是这里手动删除了镜像tag为10-30的,临时解决了问题。

     

    3.问题解决

      其实该问题也是一个很小的问题,解决方式有很多,但是竟然出现了,还是简单记录一下。有以下几种解决方案。

     

    3.1 删除node上的下载的镜像

      使用docker rmi删除机器上所有重复的镜像就可以解决,但是缺点在于如果你有100个node,每个node上随机分布了pod,那么就得把所有node上重复的镜像tag给删除。

     

    3.2 Jenkins pipeline不要起重复的名字

      比如之前任务是takt-home-frontend,那么随便加一个标识,如takt-home-frontend-new,改变镜像名称也可以。但是显得不太整洁。

     

     

    3.3 k8s镜像的下载策略

      这里不做过多解释,直接上图。

      查看pod的详细配置文件,这里的拉取策略就是‘IfNotPresent’。所以最简单的方式还是手动直接指定 imagePullPolicy字段为Always。

      以下附上官网链接:https://kubernetes.io/zh/docs/concepts/containers/images/

     

  • 相关阅读:
    iOS 开发学习-类的创建与实现,与java语言的对比
    iOS 开发学习-import和include的区别
    iOS开发学习-nonatomic和atomic的区别
    用户调查报告
    第一阶段冲刺的总结报告
    数1 游戏
    用户体验
    找水王2
    场景调研 persona
    返回一个二维整数数组中最大联通子数组的和
  • 原文地址:https://www.cnblogs.com/lizexiong/p/16089007.html
Copyright © 2020-2023  润新知