在大学的课程学习,非常注重团队协作的培养,在企业开发中,团队协作开发项目的场景更是甚多。另外,在当下的热门技术栈中,微服务开发模式、前后端分离开发模式逐渐盛行,Spring Boot、VUE等热门技术,更是吸引了众多技术人员。当下的项目开发过程中,人们更加追求高内聚、低耦合,特别是
前后端分离开发模式
的提出。
但是,做到低耦合的同时,也有一系列的问题产生。比如在团队协作开发过程中,后台开发人员新开发了一个功能,需要交给前端来配置,或者是交给测试人员进行测试,怎么实现?以往的操作是后台开发人员push项目到Git,前端/测试pull项目到本地,然后再编译、开发前端和测试项目。这要求无论是后端、前端开发人员,还是测试人员,每个人的电脑都需要有相同的配置,整个开发流程非常繁琐复杂。
所以,提出了的持续集成、持续部署与持续交付
的概念,即后台开发人员实现新功能后,将项目Push到Git服务器,持续集成部署服务器
能够将Git中的项目自动拉取、编译,并将项目部署到服务器。而对于前端开发人员和测试人员,只需要得到部署后的项目链接(或IP地址),即可进行前端项目的开发,以及各种接口的测试。在这个过程中,只需要后台开发人员和服务器的配置一致即可,开发人员与测试人员的配置无需关注。
本文将基于Jenkins
系统,从软件的下载、安装与配置,以及将托管于Gitee
的Spring 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:
下载完成后的是一个msi格式
的安装包:
2.2 安装
2、双击打开安装包:
3、自定义安装位置
:
4、选择本地系统运行服务:
5、自定义端口地址:输入新端口后,点击Test Port
测试端口是否可用。出现绿色对勾
表示可用。
这里注意,默认的端口是8080,是常用端口,建议修改为
非常用
端口,如8088、8989等等。
6、输入本机的JDK
的目录
7、点击Next:
8、点击安装
9、安装完成:
10、浏览器自动打开Jenkins
的等待首页:
如果没有自动打开,手动访问 http://localhost:端口号 即可。
2.3 入门配置
11、上图首页等待片刻,自动跳转至管理员密码配置
页面:
如上图,访问页面给出的地址中的文件,使用记事本、VS code等工具打开,即可看到一个由字母和数字组成的字符串,这就是管理员密码。
复制该明文密码,粘贴在输入框即可。
12、安装推荐的插件:
这里我们选择安装推荐的插件
。
如下图,会看到各个插件在逐个安装。
安装插件过程中,一定要保持
网络质量良好
。如果有安装失败的插件,可以点击
重试
按钮,重新安装即可。如果还是失败,可以
跳过
,后续手动安装即可。
13、创建管理员用户
如上图,输入用户名
和密码
等信息,点击保存并完成
即可。
本机测试,用户名和密码不要太复杂,防止遗忘。使用 root/123456 即可。
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 为例,讲解详细的过程。
4.1 基本过程
1、点击首页的新建Item
:
2、输入任务名称
,并选择构建一个maven项目
:
然后点击页面下方的确定
按钮,即可创建一个任务。
3、这时,自动跳转至项目的配置页面
:
4、在源码管理
设置模块,选择Git
,然后输入Gitee
项目仓库地址,如下图:
5、继续往下翻,构建触发器
处,勾选Poll SCM
,并输入如下信息:
* * * * *
如下图:
这是什么意思?
这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包的项目,下图的命令不适用
输入框的内容文本:
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 Fork至自己的Gitee,进行测试。
5. 疑难杂症
如果遇到即使密码正确也无法登录的问题:
简单粗暴的解决方案是关闭密码访问。
找到下图中的配置文件
将下图中的true修改为false
即可关闭密码。
如果想修改密码,参考: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