生产环境发布管理

简介: /

前言
在一个大型团队中,生产发布是一件复杂的事情,从dev(前后端联调)-->test(测试集成&压力测试)-->pre(灰度测试)-->prod(生产环境)的多环境推进,以及生产环境的热更新、回滚等问题一直在困扰着各个公司,今天我将基于公司的自动化部署平台为大家讲解下我们是如何做到多环境部署。
每个环境做什么
在明确发布之前,我们需要明确一下每个环境的主要职责和角色:
DEV:也叫开发环境
事项:前后端接口联调,修复代码基础缺陷
角色:前端-后端
TEST:也叫测试环境
事项:测试集成测试、压力测试,开发修复bug
角色:开发(前端后端)、测试
PRE:也叫灰度环境
事项:生产环境冒烟测试,切5个左右真实生产数据,回归流程是否有问题
角色:开发(前端后端)、测试
PROD:也叫生产环境
事项:发布代码,做真实环境验证,有问题第一时间修复(sql止血订正或代码回滚)
角色:开发(前端后端)、测试、运维
大型公司如何管控代码发布
随着自动化部署CI/CD(DevOPS)成熟,目前大型公司都开始搭建自动化部署平台,形如下图:

环境管理应用监控分支应用部署部署信息配置管理应用模版流水线模板二方包

ICATION/DETAIL/OVERVIEWID=924&APPCODE=HBOS-IN

白检验白PDA白开发文档白业务文档白其他白架构小林CODING

S-INPATIENT住院工程在线发布

百度一下开发者搜索检验二

CA不安全|

正在讲话:何波;SSG;

1您正在共享屏幕

HBOS-INPATIENT

O微服务组化

双集群管理

目数据管理

应用分类

四监控管理

GIT地址

流量地图

HBOS-INPATIENT

NPATIENT.GIT

诊应用管理

8口L

业务站

X十

其他书签

自工单管理

APPCODE

应用类型

巨项目管理

只国

应用名

TT:口L

应用部署名

应用组

住院工程

概要

1

8口

HBOS

后端

8杉

日志管理

9

修改

8口

8口

81

说点什公..

责任人

9

概述环址

2

R1

件.V

R1

S

口版本管理


图1 (自动化部署平台应用主页)
当用户进入应用主页后,会发现有不同的发布环境,每一个环境对应一台服务器、一个访问域名、一组中间件环境(即dev、test等环境的nacos-mysql等都是分环境部署的)。

HBOS1.0开发基准

项目环境分类

目环境分类

境名:请输入环境名

请输入环境CODE

开启CODEREVIEW

流水线模板

环境大类

环境CODE

环境大类:

环境类型

HBOS1.0测试基准

默认分类

默认分类

环境CODE:

启用发布审批

应用模版

部署信息

环境管理

基准环境

配置管理

应用监控

HBOS-INPATIEN

应用部署

二方包

HBOS-TEST

查询

HBOS一DEV

环境名

绑定环境

环境名:

基准环境

重置

概述

控分支

环境

环境

HBOS

批备注

TEST

HBOS

CEV

D

AA


图2 (自动化部署平台多环境)
同时自动化部署平台会自动整合公司的gitlab,将分支展现在发布平台,以便用户可以界面化操作和部署

总共64条数据<1234567>10条/页V

住院医护应用日志优化-HBO..

BOS-INPATIENT住院工程在线发布应用

G-PDA-SURGERY_20230710135753订

编辑创建REVIEW作废

K_PREMISSION_20230711140358

UT_DEPT_WARD_20230711180509

院医护应用抛异常优..FONE

PED_SURGERY_WG_20230711155401

2_20230710094804司

,住院护士站->医嘱执..IONE

,[技改]住院工程添加...IONE

住院护士站->)医嘱执行-)..

PDA入手术间,介入手术,...

住院护士站-今日手术..,FONE

[住院医生站]患者转..FONE

ANDOVER_WG_20230711154825

住院护士站-今日手术明日手.

士站]岗位权限未..,FIONE

...出院带药/自理药护士..,FONE

院医护应用日志优化..IONE

PDA入手术间,介入手...IONE

7WXB20230707164601厅

院带药/自理药护士站时间..,出院

理交接班]交班患..FONE

SSERTS_202307101440197

编辑创建REVIEW作废

IJ1_20230710170958司

编辑创建REVIEW作废

[住院医生站]患者转科

[技改]住院工程添加断言..

分支名:搜索分支

编辑创建REVIEW作废

编辑创建REVIEW作废

[护士站]岗位权限未生效

编辑创建REVIEW作废

编辑创建REVIEW化

编辑创建REVIEW作废

[护理交接班]交班患者数.

干分支:MASTE

森脑.弗T而尸控件代

编辑创建REVIEW作废

麻脑利!弗质日陈生朵IO

关联FONE/REGULUS

流水线模板二

伯妈创神口人IN,E应

EVIEWID操作

220118

FEATURE

新建分支

BUGFXG

人NLIANNNON7N71玩N7O0

FEATURE

应用部薯

UGFXG

环境管理

220272

FEATURE

FEATURE

FEATUREL

应用监控

19896

20933

220925

FEATUREL

部薯信息

220817

应用模版

FEATURE

配置管理

220461

220312

21064

二方包

分支名

10770

描述

既术

人人+人


图3 (自动化部署平台分支管理)
当用户需要创建分支时,不再需要像传统的那样去git创建,或者idea创建,而是可以直接在当前发布平台创建(底层是一样的,都是创建一个新的git分支)

91条数据<12345...10>10条/页

编辑创建REVIEW作废

编辑创建REVIEW作废

HBOS一DTC诊疗中心|在线发布应用

编辑创建REVIEW作废

编辑创建REVIEW作废

编辑创建REVIEW作废

取消确定

主干分支:MASTE

编辑创建REVIEW作

编辑创建REVIEW作废

FEATURE_GINGQUAN

故障O任务

通过..FONE

编辑创建REVIEW作

报错..FONE

描述:请输入描

ATUREMISHA

FEATURE_SANMU

BUGFX_LIULI_SAVE

EATURE_DONGLIX

变更..,FONE

FEATUREDONGLIX

FEATURE_LIULI_CU

REVIEWID操作

FEATUREHUANAII

ATUREJIYUNFE

*关联平台:O

关联类型:

列表:PD-HBOS

30711124230

EATURE_HUAYU

套餐..FON9

化...FIONE

新建分支

221093

内容列表@:

流水线模板

署部署信息

支持.FONE

主干分支:

221059

口...FONE

分支名称:

4646Q

环境管理

配置管理

应用监控

220637

报错FON

应用模版

220652

161853Q

220959

项目列表:

220630

应用部署

:MASTER

220376

新建分支

分支名

需求

O缺陷

OREGULUS

220789

二方包

概述

分支


图4 (自动化部署平台分支创建)
当用户需要发布时,只需要进入对应的环境(这里我们以test为例),勾选所需要发布的分支,即可实现自动化部署。下图可以看到test环境同时部署分支约20个。

1EUEYMTS9ENOIEOEAILETOUL2EI0I194E1NSEUEVIEDOIO.ON.MOH1.00O7OA195EFERELYENIR2LIEOPNG223029N3SFESUEUHEIE

MWN2OEOERE5RETUEBULSNECNARGE20EONESAEODEUREOINGAESOERTEASOD2OCOEON5OTETUEAERMIAAITIETLOAIBSENRER9HETSE

APEN2POEMOEIREOELARIN2OITIETEFATAEAC,AEIAPANETTE20N2EFATRGENLETATINUI.EUE.2IO0ERETARUAE.INREE.OAIA

ATUIREXINYLSUPLEMENTAYFESPRESORPTON2023070E02345,BUGHYSHYING.CANOL,EVEOUTE2023070193714,FEATUREQINGQUARNS-PDA-

TAEOSEREETATUEIAEANNAEAINAERTATATAOAOEABUTOARAOETAOERNEANEOAE.ASONOTATIETETHATETRENETIONTNADEOANTENITOE

20230704134339,FEATURE_WANZI_DOCTOR_ORDER_TYPE-20230ODOETT

FEATURE_QINGQUAN_SSQ-PDA-SURGERY_20230710135753可

.TRACELOG20230621184642.FEATURE_WANZLIS-SEL-PAY-2UE

BUGFX_QIANHUA_CHECK_PREMISSION_20230711140358划

BUGFX_QINGSHAN_EY1IJ120230710170958可

分支RELEASE_HBOS-INPATIENTTEST_DEFAULTPIPELINE_20230629120734

FEATURE_WANZILIS_SELF_PAY_20230707112457日

FEATURE_AZU_BACKFEE_MC_VALID_20230707150738

请选择:HBOS-INPATIENT_TEST_默认...V

住院护士站->医嘱执行-)执行详情-)修

OS-INPATIENT住院工程|在线发布

发布时间:2023-07-1115:27

当前流水线:HBOS-INPATIENTTESTDEFAULTPIPELINE请

发布时.2J23-07-1115:54:4

新提交退出分支

醉收费-项目补费需识别是否自

DA入手术间,介入手术,住院手术需做隔离提

?)合并分支日

发布时间:2023-07-1118:34:22

2023-07-1017:09:5

镜像构建日

)依赖校验

2023-07-1114:04:0

布时.L.23-07-119:07:39

醉科补费项目筛选优化

VMAVEN构建[

发布时间2023-07-1116:26:3

2023-07-1013:57:55

发布时间:2023-07-1116:56:3

发布状态:发布失败

发布状态:发布完成

[护士站]岗位权限未生效

发布状态:发布失败

2023-07-0711:24:59

发布状态:发布完成

部署日

发布状态:发布失败

流水线模板二

完成

支REVIEW状流

2023-07-0715:07:40

发布时L.CUCJ-07-1114:53:4

HBOS1.0测试基准环境

发布状态:发布完成

]发布门三

丫开始

发布,

发布内容

变更原因

合并分支

创建时间

内容列表

发布环境

版本发布

发布人:

分支名

看部奢信息

创建

发布人:

22046

发布人:

布人:

应用模版

部署分支

219670

部署信息

219773

220272

发布状态:发布完

EATURE_XINYI_SUPPLEMENTE

2081

发布入,.

TATNSEACTAIET02029EEIN2C20A20057AELR2AE1ERFEP0C2AEA52EEAL2

情->修改执...

PROD

发布时

详情

分支

用部署

详情

.....ONOANEOA1SOE31FEATUREBUIADMISSION_0621_20230616114631.FEATUREJINGCH

详情

详情


图5 (自动化部署平台提交发布)
需要注意的是:假设我们需要对A分支进行发布,只需要勾选A分支,底层Jenkins会自动完成jar包构建,并执行底层的Docker run指令完成容器部署,这里部署的jar包每个环境都是隔离的。
即dev的jar跟test无关,每次都是新构建自己的。即使是test,点击两次发布也是构建了两个jar,只不过第二次的会覆盖第一次。这点各位需要明晰。
当测试提出我们有bug时,对应的开发人员就需要在idea中,A分支上完成代码修复并push,然后在自动化部署平台重新勾选分支,然后提交部署,完成一次重新发布,循环此过程,直至缺陷被修复。
如何排查日志
当测试提出某个环境有bug时,如果是传统Linux直接部署,我们会登录到指定的服务器用cat、grep、vim等指令进入日志文件,然后找到错误的堆栈信息。如果有结合Arthas的(Arthas排查错误)可以启动Arthas查看错误信息。但是现在一般都是会借助于Skywalking或ELK进行日志查看

RACELD:36606E562FEA44D0A62D527473FE48DE.494.168907997086..V

C2F-REPEATER-CONSOLE/MODULE...

VAPEX-OSC/COM.C2F.APEX.OSC.CLIENT.API...2023-07-1120:45:59

COM.C2F.BOOT.BASE.LOG.WRAPPER.SUPPLIERCLEAR..2023-07-11

VAPEX-OSC/COM.C2F.APEX.OSC.CLLIENT.API.SER...2023-07

MYSQ/JDB/PREPAREDSTATEMENT/EXE.

Q降噪:忽略REDISSONX合并理表格

开始时间:2023-07-1120:52:50持续时间:3177MS

MYSGL/JDBL/PREPAREDSTATEMENT/EXE..

MYSGL/JDBL/PREPAREDSTATEMENT/EXE...

选择环境:HBOS1.0测试基准环境

/C2F-REPEATER-CONSOLE/MODULE/...

端点:/DRAGON-BOAT/APPREGISTER

(1...34567..

PEX-OSC/COM.C2FAPEX.OSC.CLIE...

时间范围:2023-07-1120:43:06

DRAGON-BOAT/APP/REGISTER

/DRAGON-BOAT/APP/REGISTER

2023-07-1120:58:06日最近15分钟

3344MS2023-07-1120:51:32

DRAGON-BOAT/APP/REGISTER

3134MS2023-07-1120:52:28

LETTUCE/HGET/ACCEPT

3518MS2023-07-1120:55:

GET/DICT/DEFAULT/STAFF

3249MS2023071120:44:58

152MS2023-07-1120:56:13

3151MS2023-07-1120:53:2C

2023-07-1120:45:59

DRAGONBOAT/APP/REGISTER

POST/DIRECTORY/LIST

STARTTIME

2023-07-1120:46:00

2023-07-1120:45:59

177MS2023-07-1120:52:50

2023-07-1120:45:59

SER...2023-07-1120:45:59

VLETTUCE/HGET/ONCOMPLETE

RACELD:请输入TRACEID

2023-07-1120:45:59

2023-07-1120:46:00

2树状

EXEC(%O)

2023-07-1120:45:59

ETTUCE/HGET

2023-07-1120:45:59

SELF(MS)

CE-PLATFORN

2023-07-1120:45:59

ACE-PLATFOR

CE-PLATFORM

EXEC(MS)

MYSGL-CON...

更多查询,

CE-PLATFORR

METHOD

ACE-PLATFORN

NKNOWR

MYSGL-CON..

SQL-CON...APEX

SERVICE

3183M

查看日志

列表

3205MS

3579MS

CE-PLATFORR

3705MS

ETTUCE

74MS

ETTUCE

3579MS

MYSQ-CON

SPRINGMVC

DUBBO

API

ETTUCE

3205MS

UBBC

6MS

查询

OMS

OMS

MS

OMS

9MS

重置

0MS

OMS

MS

APEX

..,APEX

MS

2023-07-1120:45:59

7MS

6MS

APEX

MS

3152MS

MS


图6 (自动化部署平台日志排查)
在上图中我们就可以看到:一个GET请求,请求路径是:/dict/default/staff,然后一个远程服务调用,使用的dubbo,最后查询mysql数据库,这样就完成一个完整的日志链路追踪。
如何回答相关问题
1.你们公司如何部署发布
方案一:Linux原生部署
我们公司的部署呢,还是比较原始的,就是直接部署在原生的Linux系统,我们平时dev发布就在idea构建好一个jar包,然后用XShell上传上去,用指令:nohup java -jar tj-learning.jar启动。测试环境和生产也是一样的操作
方案二:基于Jenkins的自动化部署平台
我们公司的部署都已经非常成熟了,有一套自动部署平台,底层是Jenkins+K8S实现自动化部署发布,我们只需要在dev、test、prod等环境勾选需要发布的分支就行,它全帮我们做好了自动部署。
2.你们公司怎么排查错误
方案一:Linux原生环境
我们公司的部署呢,还是比较原始的,就是直接部署在原生的Linux系统,所以排查日志也需要自己去找到error.log,然后手动找到报错的堆栈信息,分析出原因。比如有个NPE(NullPointException-空指针异常),就会显示具体哪行报错,我们就会分析、修复。
方案二:基于Docker的原生平台
我们公司目前的部署就是原生的Docker,通过docker logs命令人肉排查
方案三:基于Skywalking的日志检索平台(CI/CD平台)
对于日志排查,我们公司是有Skywalking的,只需要测试给我对应的traceId,我输入进去就可以看到完整的调用链路和报错的堆栈信息,然后就可以分析报错原因并修复了


相关文章
|
2月前
|
人工智能 自然语言处理 机器人
AI也会"三思而后答"?揭秘Self-RAG智能检索术
遇到AI胡说八道怎么办?Self-RAG就像给AI装了个"思考开关",让它知道什么时候该查资料、什么时候该独立思考,还能自我评估答案靠不靠谱。6步智能决策机制,让AI回答又准又稳!#人工智能 #RAG技术 #智能检索 #AI应用
180 11
|
3月前
|
消息中间件 存储 Kafka
流、表与“二元性”的幻象
本文探讨流与表的“二元性”本质,指出实现该特性需具备主键、变更日志语义和物化能力。强调Kafka与Iceberg因缺乏更新语义和主键支持,无法真正实现二元性,唯有统一系统如Flink、Paimon或Fluss才能无缝融合流与表。
314 7
流、表与“二元性”的幻象
|
JavaScript Windows 容器
Flutter Web:根据浏览器窗口改变布局大小
之前我们通过flutter开发web应用,然后用electron打包成可执行文件在pc端使用,因为electron可以设置最小宽高,所以布局不会越界,但是如果直接在浏览器中打开,因为浏览器的大小无法控制,如果用户缩小浏览器会导致布局越界。根据大部分网站的经验来看,当窗口缩小到一定程度后,布局就不会再改变,反而是增加了滚动,这样就保证了布局的正确性,所以我们也打算这么做。
1746 0
|
6月前
|
设计模式 人工智能 API
​​混合检索技术:如何提升AI智能体50%的响应效率?​
本文深入解析检索增强智能体技术,探讨其三大集成模式(工具模式、预检索模式与混合模式),结合实战代码讲解RAG组件链构建、上下文压缩、混合检索等关键技术,并提供多步检索工作流与知识库自更新机制设计,助力高效智能体系统开发。
573 1
|
7月前
|
人工智能 测试技术 数据库
企业数字化如何避免智能体设计陷入‘技术堆砌’的陷阱,真正做到以业务为导向?
本文AI产品专家三桥君探讨了如何以业务为导向设计智能体系统,避免陷入技术堆砌陷阱。通过电信运营商套餐推荐场景,提出从需求分析、多智能体协同设计到开发落地的完整方法论。三桥君强调技术需服务于业务本质,为AI智能体落地提供系统性实践路径。
262 0
|
4月前
|
关系型数据库 MySQL Linux
Centos 7.2 系统安装mysql5.7.10指定版本
本文介绍在CentOS 7.2系统上安装MySQL 5.7.10的完整步骤,包括下载RPM包、解压、依赖处理、强制安装、服务启动与状态检查,并通过日志获取临时密码后修改为自定义密码,确保MySQL服务正常运行。
428 9
|
6月前
|
C# 图形学 开发者
【Unity3D实例-功能-移动】角色行走和奔跑的相互切换
本文介绍了如何在Unity中实现角色行走与奔跑的切换功能,涵盖动画器创建、动画设置、角色移动代码编写及测试运行,帮助开发者提升角色移动的灵活性与操作体验。
226 0
|
SQL druid 搜索推荐
大数据分析-常见分布式OLAP查询引擎研究
通用大数据分析OLAP引擎的粗浅研究学习-更新中
1069 0
大数据分析-常见分布式OLAP查询引擎研究
卖家不在设置的收款账户列表之中seller_id-参数解读系列
错误原因:   在接口中添加seller_id参数不是请求appid对应的pid导致 seller_id传值方式:   不传值:默认是您请求时候appid对应的pid(2088开头),也就是请求参数中不传seller_id ,不报错    要传值:可以传您的appid对应的pid(2088开头),...
3324 13