项目部署、发布、调试流程操作文档

现在的项目除第一次发布部署以外,均已经自动化流程了,下面将针对开发者详细说明流程操作以及可能遇到的问题。

这里将使用到几种工具:jenkins、kubesphereelk

jenkins地址: http://jenkins.cd.zhinf.com

kubesphere地址: http://kubesphere.cd.zhinf.com

elk 地址:http://elk.sww.grsw.cn

jenkins为项目打包部署工具,kubesphere则是日志查看以及服务调试工具,elk 则是线上环境日志查看工具。jenkins、kubesphere账号需联系运维开通,两个服务的账号密码都一样。elk 账号询问运维人员提供。

项目发布流程:

  1. 开发者提交代码到git仓库对应分支(dev、test、prev、main)

  2. 开发者登录jenkins选择项目以及对应分支,并点击<立即构建>进行项目构建发布。

  3. 如构建为成功状态,服务及部署成功,开发者需要等待约一分钟。如仍无法正常连接或访问到对应服务,开发者应登录kubesphere找到对应服务的容器,查看容器状态及日志信息进行排错。如果是线上环境只能查看查看日志,开发者无法直接进行调试,线上看日志工具为 elk。

项目部署发布流程(详细)

1.代码推送

如果项目是第一次发布,对于需要部署发布的环境,应首先创建/合并分支到需要部署发布的环境分支(dev、test、prev、main),如果是部署线上环境,除合并 main 分支以及构建操作以外,还需要运维人员手动部署,这里线上环境构建只推送镜像,不自动部署。

2.项目发布

后端
第一次发布
数据库:开发人员需手动在数据库创建对应库以及库表结构导入,数据库名默认为:项目名_分支名。
​
nacos:然后需要在内网 nacos 中在对应环境命名空间下面创建项目配置文件,对于 nacos 中所有连接的基础依赖服务都应写为 hosts 名称,具体可以参考该文档中的中间件名称:http://halo.cd.zhinf.com/archives/host,需要注意的是这里的 server.port字段后面都会唯一且固定,请在部署时不要随意修改其端口号以免造成无法访问的问题出现。
​
端口:服务端口应保持公司内唯一的标准,这个端口由运维人员分配并告知开发者,开发者手动填写到 nacos对应项目配置文件的server.port中。
​
当环境配置完后请联系运维人员配置 jenkins 及服务部署环境。

线上环境:如果是线上环境则需要自行准备好数据库初始化 sql 以及nacos 配置文件交付于运维。

非第一次发布
如果是非第一次发布则直接于 jenkins 构建部署即可。

线上环境:如果是线上环境的发布部署需要出发布交付的文档,文档会包括部署相关配置说明及改动信息。

前端
第一次发布
nginx 配置文件:如前端已有 nginx配置文件可直接将其发于运维,如没有 nginx 配置文件需告知前端转发后端的接口地址。
​
配置文件解决完毕后请联系运维人员配置 jenkins 及服务部署环境。

线上环境:如转发规则有更改时需通知运维人员修改。

非第一次发布
如果是非第一次发布则直接于 jenkins 构建部署即可

线上环境:同第一次发布。

3.项目调试(发布后操作)

日志查看及调试操作

dev、test、prev 环境都通过 kubesphere 进行日志查看以及调试工作,详情请参考下面的 kubesphere 使用指南

线上环境开发者无法直接调试,只能查看日志,日志通过 elk 进行查看,详情请参考下面的 elk 使用指南

项目访问地址

项目部署后,除了前端会有相对的域名访问以外,所有服务都会有一个唯一的 ip 和端口作为直接访问的入口,访问入口ip/端口请前往http://halo.cd.zhinf.com/archives/1710150189028进行查询,如果找不到服务访问地址或服务正常运行但访问有问题请联系运维处理。

jenkins使用指南

这里将使用 jenkins 来进行项目编译打包以及对应环境的项目更新

项目部署

1.访问并登录jenkins以后,找到对应的项目

image-20240322152637970

2.选择分支名并点击进入,这里只会识别feature/prev/test分支,如果有分支新版本没有出现在这里,请点击立即扫描多分支流水线,通过扫描发现新的分支

  1. 点击立即构建

    这里构建需要注意的是后端可以直接构建

image-20240325153409747

但前端这里是点击build with parameters,这里默认选择no表示不进行代码扫描。因前端代码普遍扫描时间比较慢,所以加入了参数构建,默认不进行代码质量扫描。如需进行代码扫描请选择为 yes。

image-20240325153543691

阶段视图(任务构建步骤)

前后端阶段视图中每一个阶段的任务说明

前端

image-20240325155002944

Declarative: Checkout SCM :拉取代码步骤
SONAR:sonarqube代码质量检测,前端默认不进行代码质量检测
BUILD:代码编译打包步骤,该步骤运行的命令包括:npm install以及npm run build:<代码分支>,这里的分支目前支持test/prev/release
IN: docker镜像打包以及项目更新重启
Declarative: Post Actions: 构建状态推送,该步骤会将构建完成失败或成功的状态推送至企业微信
后端

image-20240325155625611

Declarative: Checkout SCM : 拉取代码步骤
SONAR: sonarqube代码质量检测
MVN: mvn代码编译打包,该步骤运行了命令mvn clean package -U -Dmaven.test.skip=true 
IN: docker镜像打包以及项目更新重启
Declarative: Post Actions: 构建状态推送,该步骤会将构建完成失败或成功的状态推送至企业微信

问题排错

如果发布有问题,其对应任务失败的阶段会呈现为红色,根据失败阶段来排错,如果是MVN或者 BUILD步骤失败,可根据其构建任务日志自行排错,如果是环境或者网络问题以及其他阶段出现的故障问题请联系运维人员。

新分支构建

以 test 分支为例,假如这里 test 有一个 1.0.0 分支,后面加入了test/2.0.0,默认情况在 jenkins 对应项目下面是看不到该分支的,需在 jenkins 中进入该项目,然后点击: 立刻扫描 多分支流水线,新的分支就会出现在构建分支里面。

kubesphere使用指南

这里 kubeshpere 主要用于查看对应环境的服务状态及日志信息,以及对服务的控制。

登录

登录这里请选择通过LDAP 登录,然后输入账号密码,其账号密码与 jenkins 一样。如登录后显示不属于任何企业空间则联系运维人员开通访问权限。

image-20240326093754381

image-20240326094241013

使用

正常情况下登录进来能看到振瀚信息的企业空间,点击项目,点击进入对应分支(一个分支一个环境)。image-20240326094407656

image-20240326094516440

然后进入容器组

image-20240326102841727

然后就可以看到该环境下所有容器,其容器命名规则为:项目名-随机字符串 ,在项目容器较多的情况下可以通过搜索框来找到对应的项目容器。

这里只需要关注两个字段:状态、更新时间

image-20240326102951778

状态: 当状态显示为运行中,容器名下面有一个 running 字样时则表示目前运行正常。如果不是 running 而是Contener
更新时间: 表示容器最近的更新时间,也可以看作其最近的重启时间。

点击容器名可以进入该容器的控制台,这里主要用到的功能为三个

1.删除(更新重启)

2.日志

3.进入容器内部

image-20240326103543482

1.删除(更新重启)

这里的删除并非真正的删除,而是使容器重启并拉取最新的容器镜像。也就是 更新与重启服务

删除的时候会要求输入容器项目的名称以确认,这里复制粘贴即可。

2.日志查看

点击该按钮可查看日志

image-20240326104348980

默认会打印到当前最新的前台输出日志,可点击如下按钮进行实时刷新查看

image-20240326104440237

3.进入容器内部

点击该按钮可进入容器内部,终端主要作为调试服务时使用

image-20240326105201081

image-20240326110417730

elk 使用指南

elk是日志查看工具,访问以后进入登录界面,这里登录账号密码请联系运维获取。

image-20240408114256440

登录后在首页右边点击三根横线的图标,然后点击选择下面的 Discover

image-20240408114359630

然后就进入到日志查看页面了,将鼠标移动至 message所在的地方,然后点击➕号,这个时候右边就会显示出日志信息了image-20240408114544083

image-20240408135948368

还需要添加筛选,通过service_name.keyword,然后在选择值的地方输入服务名(这里输入前缀可以补全查找到服务)

image-20240408140032129

image-20240408140205838

日志默认是查看 15分钟以内的日志,默认日志非实时刷新,点击日历图标可以设置自动刷新。

image-20240408140441730

问题及排错思路

发布后服务并未更新

通过 jenkins 发布以后如果其任务状态都正常但并未更新,这里排错可分为两个步骤

1.确认 jenkins 是否发布成功

正常情况 jenkins 只要发布成功且所有任务步骤为绿色则为成功,但有时会出现到任务未捕获到的错误,这时jenkins 虽然显示其步骤成功但实际是失败。这里可以可以点击进每个步骤的日志确认其状态是否为成功。

image-20240326110816250

2.通过 kubesphere确认容器是否重启动成功

通过 kubesphere 找到对应项目容器,如果其状态为 running/运行中,则容器本身不存在任何问题,请通过日志查看问题。

image-20240326111637957

如果其状态为CrashLoopBackOff/等待中,或 error/等待中,这种情况通常为服务自身启动失败挂掉,请通过日志查看具体问题。

image-20240326111715541

如果为其中以下任意一种状态,通常是容器更新在重启服务,但如果长时间都卡在某一个状态,请联系运维人员查看解决问题:

Terminating/Peeding/Containercreating/ContainersNotready

image-20240326111946038