CI/CD平台,部署中空格引发的两个血案

2024-01-20 08:38

本文主要是介绍CI/CD平台,部署中空格引发的两个血案,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

1. 前端static部署

            微服务前端js,编译打包成的tar包,在部署阶段,需要解压缩到与这个微服务对应的location,这个过程分别在流水线的“代码打包”和“部署”这两个阶段完成。

     代码打包:

             通过下面的命令完成:

                 cd xxx-yyy && yarn --update-checksums && yarn && yarn build_test && cd dist && tar -czf ../xxx-yyy.tar.gz .

     部署:

                webDir="/data/website/${env}/${location}"

                mkdir -p ${webDir} && rm -rf ${webDir}/* && tar -xf ${package} -C ${webDir}/

                env一般是dev和test环境,假如location是:index,结果是生成目录: /data/website/dev/index,解压缩tar包到这个目录下。

 

       在开发环境,偶尔会出现所有的前端静态目录都被删除的情况,即:/data/website/dev目录被干掉了。真是狗血,所有的前端得全部构建部署一遍。

       经过排查,原来是这里的问题:

       mkdir -p ${webDir} && rm -rf ${webDir}/* && tar -xf ${package} -C ${webDir}/

       这个webDir,webDir="/data/website/${env}/${location}",其中的参数location是在平台的web页面上配置的,如下图:

 

    这个location的文本前面,有个空格,webDir是个组合成的字符串,会变成“/data/website/dev/ index”。

    好了,问题就是,在rm -rf ${webDir}时,命令行是这样的: rm -rf /data/website/dev/ index,就把webDir="/data/website/${env}/${location}"给干掉了。

 

 

2. 后端部署

          微服务后端是生成docker镜像后,以容器的形式部署在k8s集群中。

         部署的过程中,通过webconsole查看日志,会出现这样的错误:

        查看容器的状态:

         排查:

              1)是不是这个jar包不存在???

                        

                  直接docker运行这个镜像,问题也一样。查看这个jia包,是存在的。

             2)看看这个jar包可以创建进程不???

                       

                   这个jar应该也没有问题。

             3)是不是docker镜像的缺省entrypoint的参数,或者k8s的容器启动命令或者参数配置有问题???

                   由于这个应用是配置了启动命令和参数的,因此会替换镜像缺省的entrypoint,继续查看容器的启动命令和参数:

          原来是启动命令行指定的jiar包名称“xxx.jar ”,jar后面多了个空格。 而通过go模板生成服务yaml时,这个空格会被认为是jar包名称的一部分,最终k8s创建容器后,启动的命令行也会

去那这个“xxx.jar ”的jar 包,自然这个jar包是不存在的。

 

思考:

          为啥一个简单的空格,引起的问题这么严重,排查也花了蛮久时间呢?

    这样的低级错误,在开发过程中,就没有注意到?在写代码时,参数应该做些怎样的检查?字符串的处理应该怎么写?

    思考问题不够严谨,停留于功能的实现,没有精益求精。

       

 

这篇关于CI/CD平台,部署中空格引发的两个血案的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/625422

相关文章

python管理工具之conda安装部署及使用详解

《python管理工具之conda安装部署及使用详解》这篇文章详细介绍了如何安装和使用conda来管理Python环境,它涵盖了从安装部署、镜像源配置到具体的conda使用方法,包括创建、激活、安装包... 目录pytpshheraerUhon管理工具:conda部署+使用一、安装部署1、 下载2、 安装3

k8s部署MongDB全过程

《k8s部署MongDB全过程》文章介绍了如何在Kubernetes集群中部署MongoDB,包括环境准备、创建Secret、创建服务和Deployment,并通过Robo3T工具测试连接... 目录一、环境准备1.1 环境说明1.2 创建 namespace1.3 创建mongdb账号/密码二、创建Sec

Java中的Opencv简介与开发环境部署方法

《Java中的Opencv简介与开发环境部署方法》OpenCV是一个开源的计算机视觉和图像处理库,提供了丰富的图像处理算法和工具,它支持多种图像处理和计算机视觉算法,可以用于物体识别与跟踪、图像分割与... 目录1.Opencv简介Opencv的应用2.Java使用OpenCV进行图像操作opencv安装j

将Python应用部署到生产环境的小技巧分享

《将Python应用部署到生产环境的小技巧分享》文章主要讲述了在将Python应用程序部署到生产环境之前,需要进行的准备工作和最佳实践,包括心态调整、代码审查、测试覆盖率提升、配置文件优化、日志记录完... 目录部署前夜:从开发到生产的心理准备与检查清单环境搭建:打造稳固的应用运行平台自动化流水线:让部署像

Python项目打包部署到服务器的实现

《Python项目打包部署到服务器的实现》本文主要介绍了PyCharm和Ubuntu服务器部署Python项目,包括打包、上传、安装和设置自启动服务的步骤,具有一定的参考价值,感兴趣的可以了解一下... 目录一、准备工作二、项目打包三、部署到服务器四、设置服务自启动一、准备工作开发环境:本文以PyChar

centos7基于keepalived+nginx部署k8s1.26.0高可用集群

《centos7基于keepalived+nginx部署k8s1.26.0高可用集群》Kubernetes是一个开源的容器编排平台,用于自动化地部署、扩展和管理容器化应用程序,在生产环境中,为了确保集... 目录一、初始化(所有节点都执行)二、安装containerd(所有节点都执行)三、安装docker-

在Ubuntu上部署SpringBoot应用的操作步骤

《在Ubuntu上部署SpringBoot应用的操作步骤》随着云计算和容器化技术的普及,Linux服务器已成为部署Web应用程序的主流平台之一,Java作为一种跨平台的编程语言,具有广泛的应用场景,本... 目录一、部署准备二、安装 Java 环境1. 安装 JDK2. 验证 Java 安装三、安装 mys

Docker集成CI/CD的项目实践

《Docker集成CI/CD的项目实践》本文主要介绍了Docker集成CI/CD的项目实践,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学... 目录一、引言1.1 什么是 CI/CD?1.2 docker 在 CI/CD 中的作用二、Docke

锐捷和腾达哪个好? 两个品牌路由器对比分析

《锐捷和腾达哪个好?两个品牌路由器对比分析》在选择路由器时,Tenda和锐捷都是备受关注的品牌,各自有独特的产品特点和市场定位,选择哪个品牌的路由器更合适,实际上取决于你的具体需求和使用场景,我们从... 在选购路由器时,锐捷和腾达都是市场上备受关注的品牌,但它们的定位和特点却有所不同。锐捷更偏向企业级和专

Jenkins中自动化部署Spring Boot项目的全过程

《Jenkins中自动化部署SpringBoot项目的全过程》:本文主要介绍如何使用Jenkins从Git仓库拉取SpringBoot项目并进行自动化部署,通过配置Jenkins任务,实现项目的... 目录准备工作启动 Jenkins配置 Jenkins创建及配置任务源码管理构建触发器构建构建后操作构建任务