• 搜索
  • 夜间模式
    ©2026  依刻学习 Theme by OneBlog

    依刻学习博客

    搜索
    标签
  • 首页>
  • 学习的一天>
  • 正文
  • jenkins实现kodcloud容器集群自动部署(2)

    2025年02月18日 18 阅读 0 评论 3475 字

    错误集合

    1.sed替换出现重复问题

    • 错误

      sed -i 's#User.*#User=root#p' /usr/lib/systemd/system/jenkins.service
    • 原因
      经过不断测试,目前只测试定位到是sed末尾的'p'导致替换后重复两次
      具体原因未知
    • 解决
      删除'p'
      sed -i 's#User.*#User=root#' /usr/lib/systemd/system/jenkins.service

    2.sed替换出现符号冲突

    • 错误
    • 原因
      目前定位到是因为$出现问题,并且经过测试仅在sed的替换s模式中,'$'与替换符号连续时报错
      在sed的其他模式中不会报错,不连续时不报错
      具体原因未知
    • 解决
      删除$,不在替换中使用

    3.未传递root密码导致mysql容器无法启动

    • 错误
    • 原因
      在初始化时,原来是通过--build-args传入ARG参数,ARG参数再赋给MYSQL_ROOT_PASSWORD(现在感觉ARG赋值ENV根本没啥用),docker-compose中没有传入导致少了个ENV,但mysql容器的启动不能缺少root密码
    • 解决
      修改mysql的dockerfile,删除ARG变量赋值给ENV变量的操作,改为直接赋值

    4.未删除旧dockerfile构建的镜像导致新dockerfile没有构建

    • 错误
      参考错误3,修改后仍然报此错误
    • 原因
      旧的镜像没有删,导致构建镜像时Docker使用缓存机制跳过构建新的dockerfile而是直接使用旧的镜像
    • 解决
      删除旧的镜像,重新构建

    5.jenkins部署节点上没有git

    • 错误
    • 原因
      jenkins无法使用git初始化,因为部署节点没有安装git
    • 解决
      配置阿里源,安装git

    6.脚本返回值错误导致jenkins显示异常

    • 错误

      脚本错误退出,但是jenkins显示正常
    • 原因
      Jenkins是根据命令返回值来判断脚本是否正常运行的,返回值为0即正常退出
    if [ ${is_redis} -eq 0 ]; then
      echo "redis启动失败,退出安装"
      exit 0;
    fi
    

    虽然脚本显示失败了,但是返回0,jenkins认为是正常的

    • 解决
      修改返回值为1

    7.网桥网络未创建

    • 错误
    • 原因
      jenkins显示脚本出错,一个个测过去发现是网桥网络没创建导致无法启动容器
    • 解决
      docker network create kodnet

    8.脚本判断缺少判断特殊条件

    • 错误
      脚本报错,发现nginx/conf.d目录为空,里面应该存放kod的server配置
    • 原因
    if [ ! -z ${new_web} ]; then
      web=$(ls ${home}/nginx/conf.d)
      sed -i  "s#server_name.*#server_name ${new_web};#" ${home}/nginx/conf.d/${web}
      mv ${home}/nginx/conf.d/${web} ${home}/nginx/conf.d/${new_web} &>/dev/null
      rm ${home}/nginx/conf.d/${web} -f
    else
      echo "默认域名为kod.wym.com"
    fi
    

    错在if [ ! -z ${new_web} ]; then,只判断了new_web是否为空,非空旧重命名并删除旧文件,但是忘记了特殊情况,用户输入与默认web同名的new_web时,同样是非空,但是mv没有用,因为是同名,原本应该有2份文件,现在只有一份而且文件名没变,但rm却直接删除了它,导致conf.d为空

    • 解决
      增加判断,检查new_web是否与默认web同名
      if [ ! -z ${new_web} ] && [ ${new_web} -ne kod.wym.com ]; then

    9.终端访问jenkins远程构建URL权限拒绝

    • 错误
      curl 192.168.179.141:8080/buildWithParameters?token=TEST
    • 原因
      因为需要登录才能构建,所以无法直接访问触发构建
    • 解决
      使用插件Build Authorization Token Root可以解决,但是该插件使用较少
      直接使用浏览器访问登录,可以触发
      仅通过curl似乎无法登录,添加'-u'进行验证也无法登录,显示401,即-u无法提交登录信息

    10.java程序后台重复运行导致报错

    • 错误

      报错显示无法连接,但是jenkins端查看是能连上的
    • 原因

      发现后台运行两个java指令,第一个java程序连上了占用了连接,所以jenkins显示连上了,第二个连不上所以终端显示报错
    • 解决
      kill %2
      kill其中一个即可

    新发现

    1.在脚本有read情况下进行非交互输入

    ./START.sh <<EOF
    HELLO    #变量1
    WORLD    #变量2
    EOF
    

    2.jenkins默认工作目录
    jenkins的工作目录默认为var/lib/jenkins,可以指定工作路径,且jenkins会自动创建路径

    3.shell脚本if多条件判断

    if [ ! -z ${new_web} ] && [ ${new_web} -ne kod.wym.com ]; then
    

    4.响应码401和403
    响应码401要求进行身份验证
    响应码403大部分都是身份验证失败,服务端拒绝

    本文著作权归作者 [ wymm ] 享有,未经作者书面授权,禁止转载,封面图片来源于 [ 互联网 ] ,本文仅供个人学习、研究和欣赏使用。如有异议,请联系博主及时处理。
    取消回复

    发表留言
    回复

    Copyright©2026  All Rights Reserved.  Load:0.018 s
    Theme by OneBlog V3.6.5
    夜间模式

    开源不易,请尊重作者版权,保留基本的版权信息。