02. 开发手册(git代码管理,Jenkins使用)

1. git代码管理

前面我们已经学习了通过git管理代码,在实际企业开发中需要使用git对项目进行版本控制,也就是GitFlow工作流程。

1.1. GitFlow工作流程

在gitflow流程中,master和develop分支属于长期分支,长期分支是相对稳定,所有开发完成或测试通过的提交最终都要合并到这两个分支上,他俩也有一些区别:

  • master:发布上线时,基于master打tag,基于tag进行发布,不允许在该分支上开发,始终保持该分支的稳定。
  • develop:开发阶段使用的分支,提交到该分支代码都是相对稳定的,不能直接基于此分支开发,如果开发新的功能,需要基于此分支创建新的分支进行开发功能,待功能开发、测试通过后合并到develop分支。
    在这里插入图片描述

对于新功能的开发,基于Develop分支创建Feature分支,功能开发完后合并到Develop分支,禁止未开发完成的代码合并到Develop分支
在这里插入图片描述

在开发中,新功能的代码已经全部合并到Develop分支,此时需要基于Develop分支创建Release分支,在Release分支中不再添加新的功能,只是做bug的修复,等测试完成bug全部修复之后,需要将Release分支合并到Master分支和Develop分支,并且基于Master打出版本的tag。
在这里插入图片描述

如果发布到生成环境的版本出现bug,比如:生产环境的v1.0版本出现bug需要尽快修复,此时就需要基于master创建hotfix分支,并且基于hotfix分支修复bug,待bug修复完成后需要将代码合并到master和develop分支。
在这里插入图片描述

1.2. 基于gogs服务开发

前面介绍了GitFlow工作流程,项目中我们将基于gogs服务进行开发,下面用一个简单的工程演示如何按照GitFlow工作流程进行开发。

1.2.1. 拉取代码

拉取sl-express-gitflow-web代码,在本地运行起来,目前项目版本为1.0。

img

拉取完成后,点击【Cancel】按钮:

img

导入Module:

img

启动后访问http://127.0.0.1:18099/doc.html

img

测试功能:

img

1.2.2. 创建develop分支

img

img

推送develop分支到gogs:

img

推送成功:

img

1.2.3. 基于feature分支开发新功能

开发新的功能需要基于develop分支创建feature分支,假设我们需要增加一个相乘的接口。

img

img

com.sl.gitflow.controller.GitFlowController中新增相乘的方法:

    @ApiOperation("两个数相乘")
    @GetMapping("/mul")
    @ApiImplicitParams({@ApiImplicitParam(name = "value1", value = "第一个数", example = "1"), @ApiImplicitParam(name = "value2", value = "第两个数", example = "2")})
    public R<Object> mul(@RequestParam(value = "value1") Long value1, @RequestParam(value = "value2") Long value2) {
        return R.success(value1 * value2);
    }

重启、测试:

img

测试完成后,将代码合并到develop分支:

提交代码(此时,在feature分支进行提交):

img

切换到develop分支:

img

img

推送develop分支到gogs:

img

推送成功:

img

推送完成后,一般情况需要将feature分支删除掉,不推送到远程仓库。

img

1.2.4. 创建Release分支

develop分支开发基本上结束后,将基于develop分支创建release分支,在此分支进行测试,测试完成后合并到masterdevelop分支。

img

img

创建分支后,模拟测试和bug修复,对代码增加注释改动:

img

提交代码:

img

推送到远程仓库:

img

推送成功:

img

所有测试完成后,将release分支合并回masterdevelop,并且推送到远程仓库。

img

img

1.2.5. 创建tag标签

img

推送到远程:

img

推送成功:

img

img

创建tag完成后,就可以基于tag发布了。

1.3. 项目代码列表

在虚拟机中的gogs服务中已经提供了项目中所涉及都的项目代码,目前项目拥有19个微服务,1个网关,1个parent工程,2个公共依赖工程。如下:

序号项目名称说明
1sl-express-parent父工程
2sl-express-common通用工程
3sl-express-mq统一消息代码
4sl-express-gateway统一网关
5sl-express-ms-base基础微服务
6sl-express-ms-carriage运费微服务
7sl-express-ms-courier快递员微服务
8sl-express-ms-dispatch调度微服务
9sl-express-ms-driver司机微服务
10sl-express-ms-oms订单微服务
11sl-express-ms-service-scope服务范围微服务
12sl-express-ms-sms短信微服务
13sl-express-ms-track轨迹微服务
14sl-express-ms-trade支付微服务
15sl-express-ms-transport路线微服务
16sl-express-ms-transport-info物流信息微服务
17sl-express-ms-user用户微服务
18sl-express-ms-web-courier快递员web服务
19sl-express-ms-web-customer用户web服务
20sl-express-ms-web-driver司机web服务
21sl-express-ms-web-manager后台web服务
22sl-express-ms-work运单微服务
23sl-express-ms-search搜索微服务

** ❓思考:**是否需要把所有的工程代码都拉取到本地进行编译运行?

不需要的。你只需要将自己将要负责的开发任务相关的代码拉取到本地进行开发即可,其他的服务都可以调用测试环境正在运行的服务。

另外,你有可能是没有权限拉取到其他开发组的代码的。

2. Jenkins

2.1. 持续集成

持续集成是指,开发人员将代码合并到远程仓库后,需要【自动】的完成构建、部署等操作。

下面以Spring Boot web项目举例,说明使用Jenkins进行持续集成的过程。

在这里插入图片描述

过程说明:

  • 本地开发环境推送代码到远程仓库
  • 推送完成后,git服务会向Jenkins发送通知
  • Jenkins接收到通知后,开始触发构建(也可以手动触发构建)
  • 【git pull】从git仓库中拉取最新的代码
  • 【maven package】通过maven进行打包,Spring Boot项目会打成可执行的jar包
  • 【docker build & push】构建docker镜像,一般会将docker镜像上传到公司内部私服
  • 【ssh remote】通过ssh命令登录到远程服务器(部署的目标服务器)
  • 【docker pull】通过公司内部私服拉取docker镜像
  • 【docker run】基于拉取到的镜像,运行容器
  • 最后,完成构建

2.2. Jenkins使用

下面以部署【sl-express-gitflow-web】为例,通过Jenkins进行部署。

第一步,打开Jenkins,通过root/123登录。

img

第二步,创建构建任务:

img

第三步,设置任务内容:

img

设置一些构建参数:

img

img

设置版本号参数:(该参数会在后面部署时使用)

img

设置微服务注册到nacos中的ip地址:(该参数会在后面部署时使用)SPRING_CLOUD_NACOS_DISCOVERY_IP

img

设置端口参数:(该参数会在后面部署时使用)

img

设置服务名称参数:(该参数会在后面部署时使用)

img

设置git仓库信息:

img

设置分支:

img

img

设置构建步骤:

img

chmod a+rw /var/run/docker.sock

img

clean package -Dmaven.test.skip=true -U

设置部署脚本:

img

#!/bin/bash
# 微服务名称
SERVER_NAME=${serverName}
# 服务版本
SERVER_VERSION=${version}
# 服务端口
SERVER_PORT=${port}
# 源jar名称,mvn打包之后,target目录下的jar包名称
JAR_NAME=$SERVER_NAME-$SERVER_VERSION
# jenkins下的目录
JENKINS_HOME=/var/jenkins_home/workspace/$SERVER_NAME
#进入jenkins目录
cd $JENKINS_HOME
# 修改文件权限
chmod 755 target/$JAR_NAME.jar
#输出docker版本
docker -v
echo "---------停止容器($SERVER_NAME)---------"
docker stop $SERVER_NAME
echo "---------删除容器($SERVER_NAME)---------"
docker rm $SERVER_NAME
echo "---------删除镜像($SERVER_NAME:$SERVER_VERSION)---------"
docker rmi $SERVER_NAME:$SERVER_VERSION
echo "---------构建新镜像($SERVER_NAME:$SERVER_VERSION)---------"
docker build -t $SERVER_NAME:$SERVER_VERSION .
echo "---------运行服务---------"
docker run -d -p $SERVER_PORT:8080 --name $SERVER_NAME -e SERVER_PORT=8080 -e SPRING_CLOUD_NACOS_DISCOVERY_IP=${SPRING_CLOUD_NACOS_DISCOVERY_IP} -e  SPRING_CLOUD_NACOS_DISCOVERY_PORT=${port} $SERVER_NAME:$SERVER_VERSION

开始构建:

img

构建日志:

img

img

img

img

测试:http://192.168.150.101:18099/doc.html

img

可以看到已经部署成功。

2.3. 自动构建

想要实现在代码推送到git仓库后自动开始构建,需要分别在gogs和Jenkins中进行设置。

2.3.1. gogs设置

点击【仓库设置】:

img

添加web钩子:

img

img

url格式:http(s)://<< jenkins-server >>/gogs-webhook/?job=<< jobname >>

添加成功:

img

2.3.2. Jenkins设置

img

2.3.3. 模拟推送

可以在gogs中模拟发起推送通知,来测试是否可以自动构建。

img

查看执行记录:

img

3. 阿里巴巴开发手册

下载地址:阿里巴巴开发手册

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值