[Jenkins进阶]-后端CI/CD

字节鎏金师
• 阅读 3686

什么是后端自动化

后端自动化不是指自动生成代码,而是自动化构建项目。

如果没有自动化, 我们的后端从开发到提测工作流程可能如下:
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需要人工操作,其他步骤都是自动运行,是一个非常标准化的流程,减少了人工操作的风险,省去了重复性工作。

实现

流程图

[Jenkins进阶]-后端CI/CD

  • 开发人员提交代码至代码库
  • 触发jenki构建任务
  • 构建成功,jar包发至服务器,执行重启脚本,服务更新完毕
  • 构建失败,通过钉钉通知/企业微信/邮箱等等方式提醒开发人员代码构建失败

1.准备工作:

准备git项目:https://github.com/wzc570738205/backendproject.git
准备钉钉群(用来接收CI/CD结果通知):35669766
准备安装了jenkins的云服务器:这里自行购买,安装参考在linux服务器上安装Jenkins

2.接入代码提交通知

当你在往代码库推送了代码,通过git的webhook自动给钉钉发送消息

2.1添加钉钉群机器人(智能群助手)

[Jenkins进阶]-后端CI/CD
复制webhook,接下来会用到
[Jenkins进阶]-后端CI/CD

2.2将钉钉webhook添加至github对应相应的webhook里

[Jenkins进阶]-后端CI/CD

2.3 测试代码提交通知

配置完成,我们提交下代码进行测试
[Jenkins进阶]-后端CI/CD

至此,代码提交通知配置完成

3.接入项目CI

当我们提交完代码后,我们需要校验下此次代码合并有没有致命性错误,这里我们采取简单的方法即允许mvn clean package,如果运行没有报错,那么说明此次提交是通过的。失败则说明代码有致命错误,需要进行修改

3.1 jenkins新建项目

安装插件Maven Integration plugin

[Jenkins进阶]-后端CI/CD

  • 创建一个构建一个maven项目的job
  • [Jenkins进阶]-后端CI/CD
  • 源码管理器选择git,并填入地址以及凭证(没有就新建一个)
  • 构建触发器选择:GitHub hook trigger for GITScm polling
    [Jenkins进阶]-后端CI/CD
  • 构建环境:
  • [Jenkins进阶]-后端CI/CD

     clean package -Dmaven.repo.local=/var/jenkins_home/.m2/repository -Dmaven.test.skip=true
  • 构建后操作(可选):
    [Jenkins进阶]-后端CI/CD

我们通过jenkinsjob的执行成功与失败来确定CI是否成功

3.1.1 测试

再次提交代码,成功触发jenkins的job
[Jenkins进阶]-后端CI/CD

构建成功
[Jenkins进阶]-后端CI/CD

3.2 接入构建状态钉钉通知(这里和前端接入一样,这里不再阐述)

  • 配置钉钉自定义机器人,并选择安全设置自定义关键词,这里设置#即可
    [Jenkins进阶]-后端CI/CD
  • 下载jenkins插件DingTalk,用来进行钉钉通知
    [Jenkins进阶]-后端CI/CD
  • 配置插件=>系统管理选择钉钉,填入刚才的自定义机器人webhook地址
    [Jenkins进阶]-后端CI/CD
    [Jenkins进阶]-后端CI/CD
  • 项目里开启机器人通知
    [Jenkins进阶]-后端CI/CD
  • 点击开始构建,进行测试

    [Jenkins进阶]-后端CI/CD
    等待CI结束
    [Jenkins进阶]-后端CI/CD
    失败提醒
    [Jenkins进阶]-后端CI/CD

至此,CI配置结束,我们实现了代码提交钉钉提醒,以及CI通知提醒

4.接入CD

在上面的步骤里我们实现了CI的操作,也就是用是否能打包生成环境的包来进行建议测试代码有没有致命性错误。这一步通过后我们需要把部署包发至nginx服务器

4.1 发包至服务器

  • 安装jenkins插件Publish Over SSH
  • 设置里配置插件,填入服务器ip,高级里使用密码,设置远程服务器文件夹/
    [Jenkins进阶]-后端CI/CD
    点击测试连通性
    [Jenkins进阶]-后端CI/CD
  • 添加构建后操作Send build artifacts over SSH,发包后并执行重启服务shell

[Jenkins进阶]-后端CI/CD

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。

[Jenkins进阶]-后端CI/CD

点赞
收藏
评论区
推荐文章
Stella981 Stella981
3年前
Linux下部署python selenium UI自动化测试
之前写的pythonUI自动化一直在本地运行。后面去申请专门的windows机器来跑。因为对Jenkins下执行windows脚本不是很熟悉,集成到jenkins的时候遇到大量问题没法解决,另外一个原因就是linux下运行效率更高。。所以想尝试把UI自动化脚本部署到Linux机器上去。因为没有图像界面所以就需要用到无头浏览器了,目前方案有3个可
Stella981 Stella981
3年前
JenkinsPipeline插件的十大最佳实践
Jenkins是卓越的自动化工具之一。Jenkins可通过使用插件进行设计扩展。插件使Jenkins拥有极大的灵活性,可以在各种平台上自动执行各种流程。JenkinsPipeline建立在这种灵活性和丰富的插件生态系统的基础上,同时使Jenkins用户能够将其Jenkins自动化代码编写。本文翻译自devops.com!(https://o
Stella981 Stella981
3年前
Jenkins+RF持续集成测试(一) 环境搭建
通常在自动化测试中,我们需要对自动化测试用例定时构建,并生成报告并通过邮件发给指定的人。最佳工具选择莫过于Jenkins了。通过Jenkins集成robotframework插件,我们能非常方便的定时从git/svn上拉取最新的自动化测试用例,然后执行用例并把最终结果以测试报告的形式发给指定的人群。下面我就来详细为大家介绍一下Jenkins集成RF插件
Stella981 Stella981
3年前
Jenkins+Gitlab+自动化测试配置持续集成
Jenkins安装在win7上GitLab安装在docker上需求:本地提交自动化测试代码在gitlab上后,jenkins自动构建,拉下新提交的自动化代码,并且运行参考的链接:https://vwin.github.io/2018/10/11/JenkinsHTML%E6%8A%A5%E5%91%8A%E6%A0%B7%E5%BC%8F
Stella981 Stella981
3年前
IDEA直连服务器,进行项目Docker部署,实现一键部署、启动
1、前言   在项目中使用docker后,通过docker的方式来启动系统,需要经过编译、打jar包、打镜像、启动等阶段。在各种自动化工具的出现,对打包、部署等工作带来了便利,一般都会选择gitJenkins方式进行自动化部署。在面对本地开发调试阶段,如果过分的依赖自动化工具,会显得并不是那么的方便,比如:频繁的代码调整修改,却要进行代码
Stella981 Stella981
3年前
Eclipse安装Git插件及简单操作
0\.前言说一件事,说起来也是好笑,工作三年半了,还没接触到团队开发,都是一个人小打小闹。因此连Git都没有使用过。感觉好Low的,这一篇,简单讲一下,Eclipse配置Git插件,并提交代码到GitLab上,这个应该很多人都懂的,知道的基本可以跳过,看下一篇了,自动化构建Jenkins.1\.安装EGit插件这个直接在
Stella981 Stella981
3年前
Jenkins+Git+Maven+Tomcat持续集成教程
关注“Java后端技术栈”回复“面试”获取最新资料回复“加群”邀您进技术交流群Jenkins是一个开源软件项目,旨在提供一个开放易用的软件平台,使软件的持续集成变得可能。现在软件开发追求的是效率以及质量,Jenkins使得自动化成为可能!亮点1.采用shell自定义
Stella981 Stella981
3年前
Jenkins安装使用教程
一、说明持续集成:Continuousintegration,CI。包括两层含义,一是指项目的每个开发人员每天都向项目代码仓库要通过git等提交他们的代码,二是指在代码提交后实现自动化的构建、部署、测试确保提交的代码没有错误或及早发现提交代码中的错误。Jenkins是一个使用java开发、开源、免费、强大的web式持续集成应用程序;常用于
API 小达人 API 小达人
1年前
国投证券如何引领金融行业的 API 治理创新?
在开发、对接阶段,因为API资产统一托管在平台上,因此可以通过API文档快速生成MockAPI,前端开发人员只需要通过MockAPI就可以快速对接后端接口,将前后端开发工作解耦,提高工作效率。在测试阶段,测试人员可以基于API文档快速创建单元测试用例,API文档和测试用例之间自动形成绑定关系。当API发生变更的时候,平台可以将数据同步到测试用例,并且可以与CI/CD流程结合,实现单元测试用例的自动化回归测试工作,并且将测试报告推送给相应邮箱。
美凌格栋栋酱 美凌格栋栋酱
5个月前
Oracle 分组与拼接字符串同时使用
SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(