乐趣区

关于jenkins:Jenkins进阶后端CICD

什么是后端自动化

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

如果没有自动化,咱们的后端从开发到提测工作流程可能如下:
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
  • 构建后操作(可选):

咱们通过jenkinsjob 的执行胜利与失败来确定 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。
更多问题欢送退出前端交换群交换 749539640

退出移动版