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

news2024/9/22 21:31:59

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

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

在这里插入图片描述

服务的运维也是一个挺复杂工作,如项目上线后的一次小版本发布,开发人员需要基于工程最新代码拉取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>

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

CPU性能优化——“瑞士军刀“

背景 最近在做一些工具的预研工作&#xff0c;会涉及到对工具的压力测试&#xff0c;分析工具的资源消耗等问题&#xff0c;其中CPU 资源消耗是关键指标之一。为了后续性能优化做准备&#xff0c;回顾了以前相关CPU优化知识&#xff0c;并做总结分享。希望能帮助到正在遇到相关…

如何为3D模型设置自发光材质?

1、自发光贴图的原理 自发光贴图是一种纹理贴图&#xff0c;用于模拟物体自发光的效果。其原理基于光的发射和反射过程。 在真实世界中&#xff0c;物体自发光通常是由于其本身具有能够产生光的属性&#xff0c;如荧光物质、发光材料或光源本身。为了在计算机图形中模拟这种效…

Zabbix出现 404Not FoundThe requested URL /zabbix was not found on this server.

目录 一、问题&#xff1a; 二、原因&#xff1a; 三、解决方法&#xff1a; 一、问题&#xff1a; Not Found The requested URL /zabbix was not found on this server. 二、原因&#xff1a; 未找到 在此服务器上找不到请求的 URL /zabbix。 /etc/httpd/conf.d 目录…

AI是未来?——知识导航

AI是未来&#xff1f;——知识导航 文章目录 AI是未来&#xff1f;——知识导航一、问题记录&#xff1a;1. LoRA微调的原理&#xff1f;网络层是什么&#xff1f;2. P-tuning v2原理&#xff1f;3. 词嵌入&#xff0c;word embedding4. 下图含义&#xff1f;5. 过拟合6. loss定…

蓝桥杯双周赛算法心得——摆玩具(分段的差不计入结果)

大家好&#xff0c;我是晴天学长&#xff0c;这是一道可以牢记的数学技巧题。 1) .摆玩具 2) .算法思路 1.创建一个Scanner对象以从用户读取输入。 2.从用户读取n和k的值&#xff0c;分别表示数组的大小和k的值。 3.创建一个大小为n的整数数组a&#xff0c;用于存储输入的数…

C语言 sizeof 函数内部进行计算

直接看代码 #include <stdio.h> int main() {int i 2;int j;j sizeof(i i);printf("i %d, j %d", i ,j);return 0; }执行结果&#xff1a; 可以看到 i的值一直是没有变的&#xff0c; j 是int类型下 sizeof占用的大小为 4个字节&#xff0c;不是i的 22…

百看不厌的85M²现代极简装饰设计。福州中宅装饰,福州装修

简而不凡 设计&#xff0c;是美好生活的序章 每个人&#xff0c;对家都有不同的想法 但对未来美好新居的向往是相同的 ABOUT THE CASE 案例简介&#xff1a; 作品&#xff1a;尽兴 风格&#xff1a;极简 面积&#xff1a;82平方 户型&#xff1a;SOHO 本套案例85㎡的公…

程序员自我修养-思考度

① 自警 考虑太少&#xff0c;牵连少&#xff0c;深度欠缺&#xff0c;易造成浅尝辄止&#xff0c;贻笑大方&#xff1b; 考虑太多&#xff0c;纬度多&#xff0c;关系复杂&#xff0c;易造成画地为牢&#xff0c;寸步难行。 ② 自励 “一个人能同时保有全然相反的两种观念&…

使用示波器探头的一些技巧和注意事项

使用保护电阻。差分探头的引脚可能存在电压过高的风险&#xff0c;因此使用保护电阻可以有效避免引脚损坏。 接地方式的影响。不管单端信号还是差分信号的测量都对接地非常敏感&#xff0c;不同的接地方式可能会对测量结果产生影响。 校准差分探头。定期校准差分探头可以确保…

16结构型模式-组合模式

我们很容易将“组合模式”和“组合关系”搞混。组合模式最初只是用于解决树形结构的场景&#xff0c;更多的是处理对象组织结构之间的问题。而组合关系则是通过将不同对象封装起来完成一个统一功能. 1 组合模式介绍 将对象组合成树形结构以表示整个部分的层次结构.组合模式可…

红日靶场复现1

红日靶场复现1&#x1f388;&#x1f388;&#x1f388;&#x1f388;&#x1f389;&#x1f389;&#x1f389;&#x1f389;&#x1f389;&#x1f389;&#x1f388;&#x1f388;&#x1f389;&#x1f388;&#x1f388;&#x1f389; 一、主机发现&#x1f388;&#x1…

CV计算机视觉每日开源代码Paper with code速览-2023.10.23

精华置顶 墙裂推荐&#xff01;小白如何1个月系统学习CV核心知识&#xff1a;链接 点击CV计算机视觉&#xff0c;关注更多CV干货 论文已打包&#xff0c;点击进入—>下载界面 点击加入—>CV计算机视觉交流群 1.【目标检测】Zone Evaluation: Revealing Spatial Bias i…

【C语言】【goto语句】复习捡拾~

goto语句可以在同一个函数内跳转到设定好的位置&#xff1a; #include<stdio.h> int main() {printf("hello world\n");goto next;printf("hehe"); next:printf("leap here\n");return 0; }goto 语句如果使⽤的不当&#xff0c;就会导致在…

Quantinuum联合中部大学量子物理学家突破“量子+AI”研究

近期&#xff0c;集成量子计算公司Quantinuum和日本中部大学宣布建立新合作&#xff0c;由AI量子模型领域的两位全球专家Bob Coecke和小泽正直&#xff08;Masanao Ozawa&#xff09;教授共同领导。作为各自领域公认的技术领导者&#xff0c;他们将建立一个跨学科团队来探索量子…

判断是否为Base64加密无意间发现特殊字符无法判断

一&#xff1a;思路 判断一个字符串是否为base64编码的流程&#xff1a; 步骤 描述 1 将字符串转换为字节数组 2 判断字节数组的长度是否是4的倍数 3 将字节数组的每个字节转换为对应的base64字符 4 判断base64字符是否合法 二&#xff1a;代码 /*** 判断是否…

《算法通关村——双指针妙用》

《算法通关村——双指针妙用》 删除元素 描述 给你一个数组 nums 和一个值 val&#xff0c;你需要原地移除所有数值等于 val 的元素&#xff0c;并返回移除后数组的新长度。要求&#xff1a;不要使用额外的数组空间&#xff0c;你必须仅使用 O(1) 额外空间并原地修改输入数组…

代碼隨想錄算法訓練營|第四十五天|1049. 最后一块石头的重量 II、494. 目标和、474.一和零。刷题心得(c++)

目录 讀題 1049. 最后一块石头的重量 II 自己看到题目的第一想法 看完代码随想录之后的想法 494. 目标和 自己看到题目的第一想法 看完代码随想录之后的想法 474.一和零 自己看到题目的第一想法 看完代码随想录之后的想法 1049. 最后一块石头的重量 II - 實作 思路 …

Redis -- 基础知识2

1.Redis客户端介绍 1.基础介绍 Redis是一种客户端-服务器结构的程序&#xff0c;通过网络进行互动 客户端的多种形态 1.自带了命令行客户端&#xff1a;redis-cil 2.图形化界面的客户端&#xff1a;依赖windows系统&#xff0c;连接服务器有诸多限制&#xff0c;不建议使用 3.基…

简单而高效:使用PHP爬虫从网易音乐获取音频的方法

概述 网易音乐是一个流行的在线音乐平台&#xff0c;提供了海量的音乐资源和服务。如果你想从网易音乐下载音频文件&#xff0c;你可能会遇到一些困难&#xff0c;因为网易音乐对其音频资源进行了加密和防盗链的处理。本文将介绍一种使用PHP爬虫从网易音乐获取音频的方法&…

Fastq文件的获取

Fastq文件的获取 Fastq文件的获取linux 下安装SRA Toolkit工具使用SRA Toolkit工具下载SRA数据 Fastq文件的获取 author:CYH-BI date:2023.10.25 Fastq文件得获取 ,可以从NCBI获取&#xff0c;也可以自己测序得到结果&#xff0c;下面介绍从网上获取数据。 linux 下安装SRA…