记一次大型微服务项目本地打包迁移部署

记一次大型微服务项目本地打包迁移部署

  • 代码合并
  • 发布过程
  • 本地部署
    • 服务配置
    • 服务打包自启动测试
    • 外部依赖
    • 排除部分外部依赖

在这里插入图片描述

服务的运维也是一个挺复杂工作,如项目上线后的一次小版本发布,开发人员需要基于工程最新代码拉取feature分支,本地修改、测试,然后合并发布到类如sit、uat等non-prod环境交由测试人员测试。复测成功后,多个feature分支有序合并到prod分支进行定期发布。

代码合并

生产发布的第一步肯定是生产分支代码的合并更新,同一个基础分支,可能你也在改,我也在改,后合并的那次commit可能就会出现conflict,我个人更喜欢在本地强制合并再处理冲突。除了merge,还有cherry-pick命令也可用于代码合并,比如有一个分支的代码需要合并到prod,但这个分支的代码与prod的gap较大,但我只想合并其中的一两次提交到prod,那这个时候就可以使用cherry-pick命令。
在这里插入图片描述

发布过程

代码的修改合并是修复生产缺陷或者是发布新功能最重要的一环(我个人这样认为),通常项目会通过gitlab或者是github做代码分布式版本管理,对的,github也可以本地部署。在敏捷开发过程,可以使用类如jenkins等工具,流水话的执行代码拉取,打包,上次,启动,而上线过后,使用devops k8s来管理监控服务已成为主流,如redhat的openshift。根据生产分支的最新代码制作镜像,然后创建deployment动态创建或销毁服务最小单元pod。
在这里插入图片描述

本地部署

之前参与的一个大型微服务项目需要本地化部署,做后续展示备用,当然页面和数据也需要脱敏。

服务配置

服务迁移最头疼的就是配置了,特别是没有使用配置中心的项目,绝大部分配置都放到了yaml配置文件中,然后通过profile执行环境。如果使用了配置中心则直接修改对应key就行了,如果没有,就只能一个个服务去修改了,这是一个苦力活儿。过程中需要注意value的缩进,有时候CV过去缩进就有问题,系统无法识别,启动报错。
数据库如果版本不同,可能需要注意一下驱动配置是否可用。如果是切换了数据库类型,如mysql换成了oracle,那还得检查代码里面的明文sql语法是否通用了。还有奇葩的,如提供给你的数据库主机没有外网ip,这个可以通过jcsh来解决,参考云数据库没有公网ip如何访问,navicate ssh隧道 + com.jcraft.jsch。redis和mq我感觉也可以这样去尝试解决,目前还没有测试过。

服务打包自启动测试

如上面提到的,提供给我们的redis就没有外网ip,所以本地测试不了服务是否能正常启动(全部使用目标配置)。但是,按我理解,打包是不需要测试项目能否正常启动的吧。这里我使用的是Idea来打包,如果是直接使用mvn命令来打包应该不会遇到这个问题。Idea有个跳过测试的开关,把这个关掉就可以了。

在这里插入图片描述

外部依赖

当前打包的A工程依赖了B工程,在打包A时,需要把B也引入进来,否则A在启动时会报错。线上打包肯定是使用的remote nexus已经deploy的最新依赖,本地打包也可以使用本地install的依赖,当然agv一定得对得上。默认情况,使用spring-boot-maven-plugin似乎并不会把这些依赖打到一个包里,可以添加includeSystemScope属性,设置为true。

<plugin>
	   <groupId>org.springframework.boot</groupId>
	   <artifactId>spring-boot-maven-plugin</artifactId>
	   <configuration>                    <includeSystemScope>true</includeSystemScope>                 
	   </configuration>
	   <executions>
	       <execution>
	           <goals>
	               <goal>repackage</goal>
	           </goals>
	       </execution>
	   </executions>
</plugin>

排除部分外部依赖

同样是外部依赖,有些我们并不想打到一个包里。如A依赖的B,B依赖了一个B1,这个B1不需要引入进来,并且引入进来后因为缺失相关配置,服务启动同样会报错,如apollo或者是链路追踪的一些依赖。你可以在A引入B的地方,手动排除掉B1。如下。

<dependency>
    <groupId>com.roswu</groupId>
    <artifactId>B</artifactId>
    <version>1.0.0-SNAPSHOT</version>
    <exclusions>
        <exclusion>
            <groupId>com.roswu</groupId>
            <artifactId>B1</artifactId>
        </exclusion>                
    </exclusions>
</dependency>

这样做可以达到目的,也很通俗易懂。但有个问题是,如果A依赖了C/D/E/F…同样依赖了B1,这个时候再每个都去exclusion一下就很麻烦了。好在spring-boot-maven-plugin也支持exclusions属性,我们可以统一配置在这里,这样一来,打包的时候就会统一过滤掉B1依赖。

<plugin>
	   <groupId>org.springframework.boot</groupId>
	   <artifactId>spring-boot-maven-plugin</artifactId>
	   <configuration>                    <includeSystemScope>true</includeSystemScope>    
     	<exclusions>
	        <exclusion>
	            <groupId>com.roswu</groupId>
	            <artifactId>B1</artifactId>
	        </exclusion>                
    	</exclusions>             
	   </configuration>
	   <executions>
	       <execution>
	           <goals>
	               <goal>repackage</goal>
	           </goals>
	       </execution>
	   </executions>
</plugin>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/103431.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

echarts-进度条

echarts-进度条 option {title: {text:"xxxx统计",left: 1%,top: 0%,textStyle: {color: "#2E3033",fontSize:18,},},tooltip: {axisPointer: {type: "shadow",},},grid: {top: 9%,left: "12%",right:"22%",bottom:"0…

基于springboot实现企业客户信息反馈平台管理系统项目【项目源码+论文说明】

基于springboot实现企业客户信息反馈平台管理系统演示 摘要 网络的广泛应用给生活带来了十分的便利。所以把企业客户信息反馈管理与现在网络相结合&#xff0c;利用java技术建设企业客户信息反馈平台&#xff0c;实现企业客户信息反馈的信息化。则对于进一步提高企业客户信息反…

6.6 Elasticsearch(六)京淘项目改造

文章目录 1.项目准备2.基础配置2.1 添加pom.xml依赖2.2 yml配置es服务器地址列表 3.具体实现3.1 item实体类封装3.2 添加接口3.3 SearchController 4.search.jsp界面4.1 搜索内容展示4.2 高亮内容样式设置4.3 搜索框内容回填4.4 添加上下页按钮 1.项目准备 我们切换回到此前的…

基于ElasticSearch+Vue实现简易搜索

基于ElasticSearchVue实现简易搜索 一、模拟数据 产品名称描述价格库存数量品牌名称智能手表智能手表&#xff0c;具有健康跟踪和通知功能。199.991000TechWatch4K智能电视4K分辨率智能电视&#xff0c;提供出色的画质。699.99500VisionTech无线耳机降噪无线耳机&#xff0c;…

ChineseChess2

中国象棋&#xff1a;黑将&#xff0c;红帅双炮&#xff0c;只要红帅中间露头怎么走怎么赢 卡主黑将的走位&#xff0c;控制住就好了 ChineseChess-CSDN博客

17 结构型模式-享元模式

1 享元模式介绍 2 享元模式原理 3 享元模式实现 抽象享元类可以是一个接口也可以是一个抽象类,作为所有享元类的公共父类, 主要作用是提高系统的可扩展性. //* 抽象享元类 public abstract class Flyweight {public abstract void operation(String extrinsicState); }具体享…

2023了,是时候使用pnpm了!

2023了&#xff0c;是时候使用pnpm了&#xff01; Excerpt 2023了&#xff0c;是时候使用pnpm了&#xff01; 什么是pnpm pnpm代表performant npm&#xff08;高性能的npm&#xff09;&#xff0c;同npm和Yarn&#xff0c;都属于Javascript包管理安装工具&#xff0c;它较npm和…

智慧垃圾站:AI视频智能识别技术助力智慧环保项目,以“智”替人强监管

一、背景分析 建设“技术先进、架构合理、开放智能、安全可靠”的智慧环保平台&#xff0c;整合环境相关的数据&#xff0c;对接已建业务系统&#xff0c;将环境相关数据进行统一管理&#xff0c;结合GIS技术进行监测、监控信息的展现和挖掘分析&#xff0c;实现业务数据的快速…

php 数组基础/练习

数组 练习在最后 数组概述 概述与定义 数组中存储键值对 数组实际上是一个有序映射 key-value&#xff0c;可将其当成真正的数组、列表&#xff08;向量&#xff09;、散列表、字典、集合、栈、队列等 数组中的元素可以是任意类型的数据对象&#xff08;可以嵌套数组&#…

视频号视频提取工具,操作简单!一键搞定

在当下信息爆炸的时代&#xff0c;视频成为了人们获取信息、娱乐和交流的重要方式。而随着视频创作的普及&#xff0c;越来越多的人希望能够从各类视频中提取出有价值的素材和片段&#xff0c;以便用于自己的创作需求。然而&#xff0c;对于大多数人来说&#xff0c;费时费力地…

模拟线程死锁现象:两个线程同时抢两个互斥锁

下面业务逻辑的分析 1.如果 flag 为 T&#xff0c;线程 A 就会先得到 / 持有 o1 对象锁&#xff0c;然后尝试去获取 o2 对象锁 2.如果线程 A 得不到 o2 对象锁&#xff0c;就会 Blocked 3.如果 flag 为 F &#xff0c;线程 B 就会先得到 / 持有 o2 对象锁&#xff0c;然后尝试去…

Mac M1下使用Colima替代docker desktop搭建云原生环境

文章目录 为什么不使用docker desktop1.docker desktop卸载2.docker、docker compose安装3.colima安装3.1获取镜像地址3.2将下载好的iso文件放到colima指定路径3.3重新执行colima start 4.minikukekubernetes安装5.关闭minikube Mac M1下使用Colima替代docker desktop搭建云原生…

SOFAStack软件供应链安全产品解析——SCA软件成分分析

近年来&#xff0c;软件供应链安全相关攻击事件呈快速增长态势&#xff0c;造成的危害也越来越严重&#xff0c;为了保障软件供应链安全&#xff0c;各行业主管单位也出台了诸多政策及技术标准。基于内部多年的实践&#xff0c;蚂蚁数科金融级云原生PaaS平台SOFAStack发布完整的…

保护云数据安全的关键环节是什么?

云数据安全是维护数据隐私和保护关键信息的关键一环。在云中存储和处理数据提供了巨大的便利性和效率&#xff0c;但同时也伴随着风险。本文将介绍保护云数据的关键环节是什么! 1、数据加密&#xff1a;在传输和存储数据时使用强加密是保护数据的基本步骤。确保数据在云中存储时…

Iterator迭代器

一、基本概念 Iterator迭代器是一种接口&#xff0c;为不同的数据结构提供一种访问机制&#xff0c;即for … of 循环。当使用for…of循环遍历某种数据结构时&#xff0c;该循环会自动去寻找 Iterator 接口。任何数据结构只要部署Iterator接口&#xff0c;就可以完成遍历操作(…

SpringBoot中对Spring AOP的实现

文章目录 SpringBoot中对Spring AOP的实现AOP简介引入依赖AOP体系与概念编写AOP切面类启动SpringBoot项目然后访问controller控制器对环绕通知放行execution表达式的含义通过注解方式定义切点 SpringBoot中对Spring AOP的实现 AOP简介 AOP (Aspect Oriented Programming), 面…

智能视频监控平台EasyCVR接口调用注意事项汇总!

TSINGSEE青犀视频监控汇聚平台EasyCVR可拓展性强、视频能力灵活、部署轻快&#xff0c;可支持的主流标准协议有国标GB28181、RTSP/Onvif、RTMP等&#xff0c;以及支持厂家私有协议与SDK接入&#xff0c;包括海康Ehome、海大宇等设备的SDK等。平台既具备传统安防视频监控的能力&…

前端,CSS,背景颜色跟随轮播图片改变而改变(附源码)

首先看效果&#xff01; 比如轮播图时红色&#xff0c;那么背景的底色也是红色&#xff0c;轮播图时黄色&#xff0c;背景的底色也是黄色&#xff0c;这就是根据轮播图的图片切换&#xff0c;而改变背景颜色随轮播图颜色一致 话不多说&#xff0c;直接上代码&#xff01;非常简…

Python使用psycopg2读取PostgreSQL的geometry字段出现二进制乱码

1、问题 读取geometry字段出现二进制乱码 查询语句&#xff1a; sql "select * from public"Note: 这种写法在PostgreSQL中直接查询, 没有问题&#xff0c;不会报错。 但是在Python中查询&#xff0c;如果导出的geom还是一长串的geometry 格式的话&#xff0c; …

【计网 EMail】计算机网络 EMail协议详解:中科大郑烇老师笔记 (五)

目录 0 引言1 电子邮件EMail1.1 组成1.2 SMTP协议1.3 案例&#xff1a;Alice给Bob发送报文1.4 SMTP总结1.5 邮件报文格式1.6 POP3协议和IMAP协议 &#x1f64b;‍♂️ 作者&#xff1a;海码007&#x1f4dc; 专栏&#xff1a;计算机四大基础专栏&#x1f4dc; 其他章节&#xf…