正文 Windows下使用Jenkins持续集成与持续部署Gitee上的Spring Boot项目完整教程 拾年之璐 V管理员 /2021年 /880 阅读 0617 ## Windows下使用Jenkins持续集成与持续部署Gitee上的Spring Boot项目完整教程 > 在大学的课程学习,非常注重团队协作的培养,在企业开发中,团队协作开发项目的场景更是甚多。另外,在当下的热门技术栈中,微服务开发模式、前后端分离开发模式逐渐盛行,Spring Boot、VUE等热门技术,更是吸引了众多技术人员。当下的项目开发过程中,人们更加追求高内聚、低耦合,特别是`前后端分离开发模式`的提出。 > > 但是,做到低耦合的同时,也有一系列的问题产生。比如在团队协作开发过程中,后台开发人员新开发了一个功能,需要交给前端来配置,或者是交给测试人员进行测试,怎么实现?以往的操作是后台开发人员push项目到Git,前端/测试pull项目到本地,然后再编译、开发前端和测试项目。这要求无论是后端、前端开发人员,还是测试人员,每个人的电脑都需要有相同的配置,整个开发流程非常繁琐复杂。 > > 所以,提出了的`持续集成、持续部署与持续交付`的概念,即后台开发人员实现新功能后,将项目Push到Git服务器,`持续集成部署服务器`能够将Git中的项目自动拉取、编译,并将项目部署到服务器。而对于前端开发人员和测试人员,只需要得到部署后的项目链接(或IP地址),即可进行前端项目的开发,以及各种接口的测试。在这个过程中,只需要后台开发人员和服务器的配置一致即可,开发人员与测试人员的配置无需关注。 > > 本文将基于`Jenkins`系统,从软件的下载、安装与配置,以及将托管于`Gitee`的`Spring Boot`项目进行`持续集成与持续部署`,讲述完整的使用过程。 > > 本文档的在线阅读版本:[https://blog.csdn.net/cxh_1231/article/details/118035067](https://blog.csdn.net/cxh_1231/article/details/118035067) ,随时更新遇到的问题。 [TOC] ### 1. 相关概念 **Jenkins 是什么?** `Jenkins` 是一款开源 CI&CD 软件,用于自动化各种任务,包括构建、测试和部署软件。其支持各种运行方式,可通过系统包、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/](https://jenkins.io/zh/download/) 下载 `Jenkins`。  这里选择Windows版本,下载的是一个 `msi格式` 的安装包:  #### 2.2 安装 2、双击打开安装包  3、自定义 `安装位置`  4、选择本地系统运行服务  5、自定义端口地址:输入新端口后,点击`Test Port`测试端口是否可用。出现`绿色对勾`表示可用。  > 这里注意,默认的端口是8080,是常用端口,建议修改为其他端口,如8088、8989等等。 6、输入本机的`JDK`的目录  7、点击Next  8、点击安装  9、安装完成  10、浏览器自动打开`Jenkins`的等待首页。  > 如果没有自动打开,浏览器内手动访问 [http://localhost:端口号](http://localhost:端口号) 即可。 #### 2.3 入门配置 11、上图首页等待片刻,自动跳转至 `管理员密码配置` 页面。  如上图,**访问页面给出的地址中的文件**,使用记事本、VS code等工具打开,即可看到一个**由字母和数字组成的字符串**,这就是**管理员密码**。 复制该明文密码,**粘贴**在输入框即可。 12、安装`推荐的插件`  这里我们选择`安装推荐的插件`。 如下图,会看到各个插件在逐个安装。  > 安装插件过程中,一定要保持`网络质量良好`。 > > 如果有安装失败的插件,可以点击`重试`按钮,重新安装。 > > 如果还是失败,可以`跳过`,后续手动安装即可。 13、创建管理员用户  如上图,输入`用户名`和`密码`等信息,点击`保存并完成`即可。 > 本机测试,用户名和密码不要太复杂,防止遗忘。 14、配置`示例URL`  如上图,选择`默认的URL`即可。然后点击`保存并完成`。 15、Jenkins安装就绪  点击`开始使用Jenkins`,即可跳转至后台。  至此,Jenkins安装完毕。 ### 3. 配置Jenkins > 以下两个操作,无先后顺序。 #### 3.1 配置JDK、Git、Maven 1、访问 `Manage Jenkins >> Global Tool Configuration`  2、点击 `新增JDK` 按钮,取消 `Install automatically` 的勾选  > 因为本机已经搭建好了JDK,所以不需要再次自动安装JDK。 3、这时,多了`JAVA_HOME`输入框,这里输入`JDK的本机地址`即可  > 配置过程中,可以随时点击`应用`按钮,保存已配置信息。 4、继续往下翻,配置 `Git` 的可执行文件路径  5、继续往下翻,配置 `Maven` 的 `MAVEN_HOME` 地址  6、点击`保存`按钮,使配置生效。 至此,几个环境配置完毕。 #### 3.2 安装Maven插件 1、访问 `Manage Jenkins >> Manage Plugins`  2、切换至`可选插件`页面,输入`maven`,搜索下图的插件,`勾选`,选择 `Install without restart` 或者 `Download now and install after restart` 均可。  > 后期`手动重启`也是可以的,在 `任务管理器 >> 服务` ,右击 `Jenkins` 可以进行 `重新启动`。 3、自动跳转至`安装任务列表`  > 这里勾选 `安装完成后重启Jenkins` 也是可以的。 > > 如果重启,遇到`密码错误`的情况,请见第五章。 至此,Maven插件安装完毕。 ### 4. 持续集成与部署Gitee上的Spring Boot项目的示例 > 首先应该保证`Gitee`上有一个`Spring Boot`项目。 > > 这里以 [https://gitee.com/cxh1231/test-jenkins](https://gitee.com/cxh1231/test-jenkins) 为例,讲解详细的过程。 #### 4.1 基本过程 1、点击首页的`新建Item`,如下图:  2、输入`任务名称`,并选择`构建一个maven项目`,如下图:  然后点击页面下方的`确定`按钮,即可创建一个任务。 3、这时,自动跳转至`项目的配置页面`,如下图:  4、在`源码管理`设置模块,选择`Git`,然后输入`Gitee`项目仓库地址,如下图:  5、继续往下翻,`构建触发器`处,勾选`Poll SCM`,并输入如下信息: ```text * * * * * ``` 如下图:  > 这是什么意思? > > 这5个符号的位置,分别表示`分`、`时`、`日`、`月`、`周`。 > > 上图中的五个*,其含义已由黄色字体显示,表示**每分钟轮询一次Gitee仓库,如果仓库有更新,则重新拉取项目,进行持续集成与持续部署**。 > > 如果输入`H/5 * * * *` ,则表示每5分钟轮询一次。 > > 更多设置方法,请检索`Poll Scm`。 6、继续下翻,`Build`处,添加如下格式的`Goals and options`: ``` clean package -Dmaven.test.skip=true ``` 如下图:  > 这里的命令不唯一。可以直接使用上图给出的示例。 7、继续往下翻,`POST Steps` 处,勾选 `RUN only if build succeeds`,然后`添加构建步骤(Add post-build step)`,选择`执行Windows批处理命令(Execute Windows batch command)`,如下图所示:  8、在`执行Windows批处理命令`框中,输入的内容,参考下图: > **这里注意,以下命令只针对Spring Boot项目(jar项目)** > > **SSM等生成war包的项目,下图的命令不适用,请自行编写,但思路雷同(复制war到Tomcat目录,启动Tomcat......)**  输入框的内容文本: ```shell 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 文件是怎么知道的呢?** > > 对于每个构建任务,都有构建历史,访问每个构建历史记录,如下图: > >  > > 可以查看每个构建记录的控制台输出内容,其中就有构建完成的jar包的详细信息,如下图: > >  > > 往后翻,如下图: > >  > > **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`,即可进行`手动构建`。如下图:  11、构建过程中,可以点进构建任务,查看其`控制台`的实时输出日志。  12、`构建成功`的标志是绿色的√,`构建失败`的是红色的×。  构建失败后,可以查看控制台日志,修改错误。 #### 4.2 关于持续集成的体现: 在`4.1节`中的`第5步`,我们设置了一个`触发器`,每隔1分钟,Jenkins轮询我们的Gitee仓库。 如果仓库项目有更新,则`Jenkins`自动拉取最新的项目进行构建、部署。 这里我们进行一下测试。 首先当前Gitee仓库中,项目首页显示的内容是这样的:  然后我们修改主页为如下内容:  然后`push`至`Gitee`,等待1分钟后,刷新网页,即可看到如下页面:  这整个过程,如果一直盯着Jenkins的此任务的页面,可以看到整个构建过程,是自动执行的。 > 如果你也想进行简单的测试,可以将项目[https://gitee.com/cxh1231/test-jenkins](https://gitee.com/cxh1231/test-jenkins) Fork至自己的Gitee,进行测试。 ### 5. 疑难杂症 **如果遇到即使密码正确也无法登录的问题:** 简单粗暴的解决方案是关闭密码访问。 找到下图中的配置文件  将下图中的true修改为false  即可关闭密码。 如果想要修改密码,请自行百度检索解决方案。 ### 6. 参考资料 + https://jenkins.io/zh/download/ + https://www.cnblogs.com/jimmyshan-study/p/11982415.html + https://cxhit.blog.csdn.net/article/details/118035067 Authored By SNZL 本文采用创作共用版权 CC BY-NC-SA 3.0 CN 许可协议,转载或复制请注明出处! -- 展开阅读全文 --