Windows下使用Jenkins持续集成与持续部署Gitee上的Spring Boot项目完整教程

在大学的课程学习,非常注重团队协作的培养,在企业开发中,团队协作开发项目的场景更是甚多。另外,在当下的热门技术栈中,微服务开发模式、前后端分离开发模式逐渐盛行,Spring Boot、VUE等热门技术,更是吸引了众多技术人员。当下的项目开发过程中,人们更加追求高内聚、低耦合,特别是前后端分离开发模式的提出。

但是,做到低耦合的同时,也有一系列的问题产生。比如在团队协作开发过程中,后台开发人员新开发了一个功能,需要交给前端来配置,或者是交给测试人员进行测试,怎么实现?以往的操作是后台开发人员push项目到Git,前端/测试pull项目到本地,然后再编译、开发前端和测试项目。这要求无论是后端、前端开发人员,还是测试人员,每个人的电脑都需要有相同的配置,整个开发流程非常繁琐复杂。

所以,提出了的持续集成、持续部署与持续交付的概念,即后台开发人员实现新功能后,将项目Push到Git服务器,持续集成部署服务器能够将Git中的项目自动拉取、编译,并将项目部署到服务器。而对于前端开发人员和测试人员,只需要得到部署后的项目链接(或IP地址),即可进行前端项目的开发,以及各种接口的测试。在这个过程中,只需要后台开发人员和服务器的配置一致即可,开发人员与测试人员的配置无需关注。

本文将基于Jenkins系统,从软件的下载、安装与配置,以及将托管于GiteeSpring Boot项目进行持续集成与持续部署,讲述完整的使用过程。

1. 相关概念

Jenkins 是什么?

Jenkins是一款开源 CI&CD 软件,用于自动化各种任务,包括构建、测试和部署软件。

Jenkins 支持各种运行方式,可通过系统包、Docker 或者通过一个独立的 Java 程序。

Jenkins 官方开发文档:https://www.jenkins.io/zh/doc/

持续集成是什么?

持续集成(英语:Continuous integration,缩写:CI)是一种软件开发实践,即团队开发成员经常集成他们的工作,通常每个成员每天至少集成一次,也就意味着每天可能会发生多次集成。每次集成都通过自动化的构建(包括编译,发布,自动化测试)来验证,从而尽早地发现集成错误。

持续交付是什么?

持续交付(英语:Continuous delivery,缩写:CD),是一种软件工程手法,让软件产品的产出过程在一个短周期内完成,以保证软件可以稳定、持续的保持在随时可以发布的状况。它的目标在于让软件的构建、测试与发布变得更快以及更频繁。这种方式可以减少软件开发的成本与时间,减少风险。

摘自官方文档和百度百科

2. Windows系统安装Jenkins

2.1 下载

1、访问Jenkins官网 https://jenkins.io/zh/download/ 下载Jenkins:

QQ截图20210618151032

下载完成后的是一个msi格式的安装包:

QQ截图20210618151104

2.2 安装

2、双击打开安装包:

QQ截图20210618151135

3、自定义安装位置

QQ截图20210618151223

4、选择本地系统运行服务:

5、自定义端口地址:输入新端口后,点击Test Port测试端口是否可用。出现绿色对勾表示可用。

QQ截图20210618151347

这里注意,默认的端口是8080,是常用端口,建议修改为非常用端口,如8088、8989等等。

6、输入本机的JDK的目录

7、点击Next:

QQ截图20210618151509

8、点击安装

QQ截图20210618151519

9、安装完成:

QQ截图20210618151529

10、浏览器自动打开Jenkins的等待首页:

QQ截图20210618151553

如果没有自动打开,手动访问 http://localhost:端口号 即可。

2.3 入门配置

11、上图首页等待片刻,自动跳转至管理员密码配置页面:

QQ截图20210618151958

如上图,访问页面给出的地址中的文件,使用记事本、VS code等工具打开,即可看到一个由字母和数字组成的字符串,这就是管理员密码

复制该明文密码,粘贴在输入框即可。

12、安装推荐的插件:

QQ截图20210618152041

这里我们选择安装推荐的插件

如下图,会看到各个插件在逐个安装。

QQ截图20210618152115

安装插件过程中,一定要保持网络质量良好

如果有安装失败的插件,可以点击重试按钮,重新安装即可。

如果还是失败,可以跳过,后续手动安装即可。

13、创建管理员用户

QQ截图20210618152441

如上图,输入用户名密码等信息,点击保存并完成即可。

本机测试,用户名和密码不要太复杂,防止遗忘。使用 root/123456 即可。

14、配置示例URL

QQ截图20210618152519

如上图,选择默认的URL即可。然后点击保存并完成

15、Jenkins安装就绪:

点击开始使用Jenkins,即可跳转至后台:

QQ截图20210618152550

至此,Jenkins安装完毕。

3. 配置Jenkins

以下两个操作,无先后顺序。

3.1 配置JDK、Git、Maven

1、访问 Manage Jenkins >> Global Tool Configuration

QQ截图20210618152934

2、点击 新增JDK 按钮,取消 Install automatically 的勾选:

QQ截图20210618153025

因为本机已经搭建好了JDK,所以不需要再次自动安装JDK。

3、这时,多了JAVA_HOME输入框,这里输入JDK的本机地址即可:

QQ截图20210618153141

配置过程中,可以随时点击应用按钮,保存已配置信息。

4、继续往下翻,配置 Git 的可执行文件路径:

QQ截图20210618153223

5、继续往下翻,配置 MavenMAVEN_HOME 地址:

QQ截图20210618153608

6、点击保存按钮,使配置生效。

至此,几个环境配置完毕。

3.2 安装Maven插件

1、访问 Manage Jenkins >> Manage Plugins

QQ截图20210618153930

2、切换至可选插件页面,输入maven,搜索下图的插件,勾选,选择 Install without restart 或者 Download now and install after restart 均可。

QQ截图20210618154040

后期手动重启也是可以的,在 任务管理器 >> 服务 ,右击 Jenkins 可以进行 重新启动

3、自动跳转至安装任务列表

QQ截图20210618154055

这里勾选 安装完成后重启Jenkins 也是可以的。

如果重启,遇到密码错误的情况,请见第五章。

至此,Maven插件安装完毕。

4. 持续集成与部署Gitee上的Spring Boot项目的示例

首先应该保证Gitee上有一个Spring Boot项目。

这里以 https://gitee.com/cxh1231/test-jenkins 为例,讲解详细的过程。

4.1 基本过程

1、点击首页的新建Item

QQ截图20210618155725

2、输入任务名称,并选择构建一个maven项目

QQ截图20210618155745

然后点击页面下方的确定按钮,即可创建一个任务。

3、这时,自动跳转至项目的配置页面

QQ截图20210618171014

4、在源码管理设置模块,选择Git,然后输入Gitee项目仓库地址,如下图:

图:源码管理

5、继续往下翻,构建触发器处,勾选Poll SCM,并输入如下信息:

* * * * *

如下图:

QQ截图20210618160049

这是什么意思?

这5个符号的位置,分别表示

上图中的五个*,其含义已由黄色字体显示,表示每分钟轮询一次Gitee仓库,如果仓库有更新,则重新拉取项目,进行持续集成与持续部署

如果输入H/5 * * * * ,则表示每5分钟轮询一次。

更多设置方法,请检索Poll Scm

6、继续下翻,Build处,添加如下格式的Goals and options

clean package -Dmaven.test.skip=true

如下图:

QQ截图20210618160214

这里的命令不唯一。可以直接使用上图给出的示例。

7、继续往下翻,POST Steps 处,勾选 RUN only if build succeeds,然后添加构建步骤(Add post-build step),选择执行Windows批处理命令(Execute Windows batch command),如下图所示:

QQ截图20210618160235

8、在执行Windows批处理命令框中,输入的内容,参考下图:

这里注意,以下命令只针对Spring Boot项目(jar项目)

SSM等war包的项目,下图的命令不适用

QQ截图20210618160313

输入框的内容文本:

set BUILD_ID=DONTKILLME

set port=8181
for /f "tokens=1-5" %%i in ('netstat -ano^|findstr ":%port%"') do taskkill /pid %%m -t -f

xcopy C:\WINDOWS\system32\config\systemprofile\AppData\Local\Jenkins\.jenkins\workspace\test1\target\cicdtest-0.0.1-SNAPSHOT.jar D:\test\test1\ /Y
echo 复制Jar包完成
start javaw -jar -Xms512m -Xmx1024m -Xmn512m D:\test\test1\cicdtest-0.0.1-SNAPSHOT.jar
exit

关于这个命令,逐行解释如下:

第1行set BUILD_ID=DONTKILLME

  • 重新设置构建ID,防止Jenkins构建进程结束后,杀掉关联进程,即防止构建进程结束后,将构建的jar项目也同步停止

第3行set port=8181

  • 指定端口。这里的端口,需要与 Spring Boot 项目中的 yaml 文件配置的端口一致,主要是用来关闭当前端口的进程,用来重新构建。

第4行for ... do taskkill ...

  • 关闭8181端口的相关进程。

这里注意,关闭的是于8181端口相关的进程,其他关联的进程(如访问此页面的浏览器)也可能会被关闭,也可能不被关闭。

第6行xcopy A B /Y

  • 将A文件复制到B目录下,/Y是禁止提示以确认改写一个现存目标文件,即覆盖文件的时候,不需要提示,直接覆盖。

这里有两个问题:

1、A 文件是怎么知道的呢?

对于每个构建任务,都有构建历史,访问每个构建历史记录:

image-20210618221129893


可以查看每个构建记录的控制台输出内容,其中就有构建完成的jar包的详细信息:

image-20210618221243853


往后翻,如下图:

image-20210618221332484


2、为什么要复制一份?

下次构建的时候,需要删除现有的jar,重新构建新的jar。

如果直接运行生成的jar,下次构建的时候,无法删除,构建失败。

第8行start javaw -jar XXX.jar

  • 使用java命令启动jar项目。
  • 中间的 -Xms512m -Xmx1024m -Xmn512m 参数是为jar项目分配内存,可以不写。

在第一次配置的时候,第8步暂时跳过,首先生成一个jar包后,确认了jar包的具体位置,再回来添加此配置。

第8步实现的就是使用Windows命令进行持续部署。

正式项目中,一般使用Linux系统,其编写的sh脚本,或者是Dockerfile脚本,可能会很长。其脚本还有可能包含测试脚本、部署脚本等。这里只是进行简单的演示,所以脚本只有这几行。这点需要搞清楚。

9、以上都设置完成后,点击页面下方的保存按钮即可。

10、进入任务的页面,点击Build Now,即可进行手动构建。如下图:

image-20210618222040304

11、构建过程中,可以点进构建任务,查看其控制台的实时输出日志:

image-20210618222228440

12、构建成功的标志是绿色的√,构建失败的是红色的×。

image-20210618222631504

构建失败后,可以查看控制台日志,修改错误。

4.2 关于持续集成的体现:

4.1节中的第5步,我们设置了一个触发器,每隔1分钟,Jenkins轮询我们的Gitee仓库。

如果仓库项目有更新,则Jenkins自动拉取最新的项目进行构建、部署。

这里我们进行一下测试。

首先当前Gitee仓库中,项目首页显示的内容是这样的:

image-20210618223312849

然后我们修改主页为如下内容:

image-20210618223352905

然后push至Gitee,等待1分钟后,刷新网页,即可看到如下页面:

image-20210618223539351

这整个过程,如果一直盯着Jenkins的此任务的页面,可以看到整个构建过程,是自动执行的。

如果你也想进行简单的测试,可以将项目https://gitee.com/cxh1231/test-jenkins Fork至自己的Gitee,进行测试。

5. 疑难杂症

如果遇到即使密码正确也无法登录的问题:

简单粗暴的解决方案是关闭密码访问。

找到下图中的配置文件

img

将下图中的true修改为false

img

即可关闭密码。

如果想修改密码,参考:https://blog.csdn.net/galen2016/article/details/84648620

6. 参考资料

  • https://jenkins.io/zh/download/
  • https://www.cnblogs.com/jimmyshan-study/p/11982415.html
  • https://blog.csdn.net/galen2016/article/details/84648620
Authored By SNZL
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

拾年之璐

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值