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

相关文章

C# 比较两个list 之间元素差异的常用方法

《C#比较两个list之间元素差异的常用方法》:本文主要介绍C#比较两个list之间元素差异,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录1. 使用Except方法2. 使用Except的逆操作3. 使用LINQ的Join,GroupJoin

Web技术与Nginx网站环境部署教程

《Web技术与Nginx网站环境部署教程》:本文主要介绍Web技术与Nginx网站环境部署教程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、Web基础1.域名系统DNS2.Hosts文件3.DNS4.域名注册二.网页与html1.网页概述2.HTML概述3.

Nginx使用Keepalived部署web集群(高可用高性能负载均衡)实战案例

《Nginx使用Keepalived部署web集群(高可用高性能负载均衡)实战案例》本文介绍Nginx+Keepalived实现Web集群高可用负载均衡的部署与测试,涵盖架构设计、环境配置、健康检查、... 目录前言一、架构设计二、环境准备三、案例部署配置 前端 Keepalived配置 前端 Nginx

ubuntu如何部署Dify以及安装Docker? Dify安装部署指南

《ubuntu如何部署Dify以及安装Docker?Dify安装部署指南》Dify是一个开源的大模型应用开发平台,允许用户快速构建和部署基于大语言模型的应用,ubuntu如何部署Dify呢?详细请... Dify是个不错的开源LLM应用开发平台,提供从 Agent 构建到 AI workflow 编排、RA

ubuntu16.04如何部署dify? 在Linux上安装部署Dify的技巧

《ubuntu16.04如何部署dify?在Linux上安装部署Dify的技巧》随着云计算和容器技术的快速发展,Docker已经成为现代软件开发和部署的重要工具之一,Dify作为一款优秀的云原生应用... Dify 是一个基于 docker 的工作流管理工具,旨在简化机器学习和数据科学领域的多步骤工作流。它

Nginx部署React项目时重定向循环问题的解决方案

《Nginx部署React项目时重定向循环问题的解决方案》Nginx在处理React项目请求时出现重定向循环,通常是由于`try_files`配置错误或`root`路径配置不当导致的,本文给大家详细介... 目录问题原因1. try_files 配置错误2. root 路径错误解决方法1. 检查 try_f

在.NET平台使用C#为PDF添加各种类型的表单域的方法

《在.NET平台使用C#为PDF添加各种类型的表单域的方法》在日常办公系统开发中,涉及PDF处理相关的开发时,生成可填写的PDF表单是一种常见需求,与静态PDF不同,带有**表单域的文档支持用户直接在... 目录引言使用 PdfTextBoxField 添加文本输入域使用 PdfComboBoxField

深入理解Apache Kafka(分布式流处理平台)

《深入理解ApacheKafka(分布式流处理平台)》ApacheKafka作为现代分布式系统中的核心中间件,为构建高吞吐量、低延迟的数据管道提供了强大支持,本文将深入探讨Kafka的核心概念、架构... 目录引言一、Apache Kafka概述1.1 什么是Kafka?1.2 Kafka的核心概念二、Ka

MySQL中动态生成SQL语句去掉所有字段的空格的操作方法

《MySQL中动态生成SQL语句去掉所有字段的空格的操作方法》在数据库管理过程中,我们常常会遇到需要对表中字段进行清洗和整理的情况,本文将详细介绍如何在MySQL中动态生成SQL语句来去掉所有字段的空... 目录在mysql中动态生成SQL语句去掉所有字段的空格准备工作原理分析动态生成SQL语句在MySQL

Spring Boot项目部署命令java -jar的各种参数及作用详解

《SpringBoot项目部署命令java-jar的各种参数及作用详解》:本文主要介绍SpringBoot项目部署命令java-jar的各种参数及作用的相关资料,包括设置内存大小、垃圾回收... 目录前言一、基础命令结构二、常见的 Java 命令参数1. 设置内存大小2. 配置垃圾回收器3. 配置线程栈大小