什么是后端自动化
后端自动化不是指自动生成代码,而是自动化构建项目。
如果没有自动化, 我们的后端从开发到提测工作流程可能如下:
1.本地机器上写代码
2.提交代码,push 到 git 远程仓库
3.执行mvn clean package
单元测试并且打包jar
包
4.ssh/ftp发包至测试服务器等各种方式
5.重启java服务
这个流程中,每一个步骤都要重复人工操作,很大增加了时间成本。对于单元测试或者打包的结果,没有一个自动的反馈机制,需要人工校验运行结果,最后部署也是人工登录服务器执行脚本,非常繁琐。
引入自动化以后,整个流程变成:
1.本地机器上写代码
2.提交代码,push 到 git 远程仓库
3.git hook 触发 jenkins 的构建 job
4.jenkins job 中拉取项目代码,运行mvn clean package
或者mvn clean package -Dmaven.test.skip=true
5.jenkins job 中执行测试服务器的部署脚本
在 自动化流程中,只有步骤1和步骤2需要人工操作,其他步骤都是自动运行,是一个非常标准化的流程,减少了人工操作的风险,省去了重复性工作。
实现
流程图
- 开发人员提交代码至代码库
- 触发jenki构建任务
- 构建成功,jar包发至服务器,执行重启脚本,服务更新完毕
- 构建失败,通过钉钉通知/企业微信/邮箱等等方式提醒开发人员代码构建失败
1.准备工作:
准备git
项目:https://github.com/wzc570738205/backendproject.git
准备钉钉群
(用来接收CI/CD结果通知):35669766
准备安装了jenkins的云服务器
:这里自行购买,安装参考在linux服务器上安装Jenkins
2.接入代码提交通知
当你在往代码库推送了代码,通过git的webhook自动给钉钉发送消息
2.1添加钉钉群机器人(智能群助手)
复制webhook,接下来会用到
2.2将钉钉webhook添加至github对应相应的webhook里
2.3 测试代码提交通知
配置完成,我们提交下代码进行测试
至此,代码提交通知配置完成
3.接入项目CI
当我们提交完代码后,我们需要校验下此次代码合并有没有致命性错误,这里我们采取简单的方法即允许mvn clean package
,如果运行没有报错,那么说明此次提交是通过的。失败则说明代码有致命错误,需要进行修改
3.1 jenkins新建项目
安装插件Maven Integration plugin
- 创建一个
构建一个maven项目
的job - 源码管理器选择git,并填入地址以及凭证(没有就新建一个)
- 构建触发器选择:GitHub hook trigger for GITScm polling
- 构建环境:
clean package -Dmaven.repo.local=/var/jenkins_home/.m2/repository -Dmaven.test.skip=true
- 构建后操作(可选):
我们通过jenkins
job的执行成功与失败来确定CI是否成功
3.1.1 测试
再次提交代码,成功触发jenkins的job
构建成功
3.2 接入构建状态钉钉通知(这里和前端接入一样,这里不再阐述)
- 配置钉钉自定义机器人,并选择安全设置自定义关键词,这里设置
#
即可 - 下载jenkins插件
DingTalk
,用来进行钉钉通知
- 配置插件=>系统管理选择钉钉,填入刚才的自定义机器人webhook地址
- 项目里开启机器人通知
点击开始构建,进行测试
等待CI结束
失败提醒
至此,CI配置结束,我们实现了代码提交钉钉提醒,以及CI通知提醒
4.接入CD
在上面的步骤里我们实现了CI的操作,也就是用是否能打包生成环境的包来进行建议测试代码有没有致命性错误。这一步通过后我们需要把部署包发至nginx
服务器
4.1 发包至服务器
- 安装jenkins插件
Publish Over SSH
- 设置里配置插件,填入服务器ip,高级里使用密码,设置远程服务器文件夹
/
点击测试连通性 - 添加构建后操作
Send build artifacts over SSH
,发包后并执行重启服务shell
shutdown.sh
#! /bin/shell
# 项目名称
APPLICATION="测试端"
# java路基
JAVA=$(which java)
# 项目启动jar包名称
APPLICATION_JAR="compreDisplay_backend-0.0.1-SNAPSHOT.jar"
PID=$(ps -ef | grep "${APPLICATION_JAR}" | grep -v grep | awk '{ print $2 }')
if [[ -z "$PID" ]]
then
echo ${APPLICATION} is already stopped
else
echo kill ${PID}
kill -9 ${PID}
echo ${APPLICATION} stopped successfully
fi
startup.sh
#! /bin/shell
# 项目名称
APPLICATION="测试后端"
# java路基
JAVA=$(which java)
# 项目启动jar包名称
APPLICATION_JAR="compreDisplay_backend-0.0.1-SNAPSHOT.jar"
nohup $JAVA ${JAVA_OPT} -jar /applocation/backend/compreDisplay_backend/${APPLICATION_JAR}
至此,CD整合完毕,现在只需要提交代码,即可实现自动打包,自动部署并重启服务。
结语
后续我会继续编写如何接入gitee、gitlab、svn。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。