Jenkins+Gitee的CICD
版本需求:
JDK:8或以上
Jenkins:2.492
1.Jenkins下载安装
https://www.jenkins.io/download/下载LTS的war包:
把下载好后的war包放到指定目录,并使用命令启动:
java -jar jenkins.war
使用浏览器打开localhost:8080
用上面的密码进行登录:
点击”安装推荐的插件“,然后等待安装:
输入用户信息,创建管理员账号:
配置实例:
点击”开始使用jenkins“。
2.配置Gitee和Item
2.1.下载插件
1.点击“Manager Jenkins”,再点击“Plugins”:
2.选择"Available Plugins",搜索并勾选,gitee、Maven Integration ,点击安装
等待安装完成:
3.安装完成后,重启jenkins,使用管理员账号登录。
2.2.配置环境
1.点击“Manager Jenkins”,找到“Tools”,在JDK中输入本地JDK的路径:
2.配置Git路径:
3.配置Maven路径:
4.点击保存。
2.3.配置Gitee令牌(可选)
1.点击“Manager Jenkins”,找到“System”:
2.在gitee下面新增,将远程仓库地址复制过来:
3.在jenkins中点击添加,选择“jenkins”,创建令牌。将类型设置为Gitee API令牌,将在Gitee中创建的令牌复制过来:
设置好后点击“添加”,再“save”保存。
2.4.配置Item
1.保存后回到首页,点击“新建item”,输入任务名crud_demo,选择free style project,“确定”。新建item输入任务名称”crud_demo“,一个自由风格的项目。
2.源码管理中,选择“git”,并输入远程仓库地址:
3.点击下面的添加“jenkins”,输入gitee网址的登录邮箱,作为用户名,输入gitee的密码,点击“添加”:
4.在credential下拉框中选择刚才添加的账号,在Triggers中,勾选"Poll SCM",并输入日程表:
1、* * * * * # 每分钟自动执行
2、5个时间单位,分别代表分钟、小时、日期、月份、星期
4月2日15点半自动执行 ,例:30 15 2 4 *
3、6个特殊符号
- 表示所有可能的取值
空格 用于时间单位的分割,有且只能又4个空格
- 表示区间。周一到周五每天晚上6点执行:0 18 * * 1-5
, 表示枚举
/ 表示每隔多久执行一次。每隔10分钟执行一次:*/10 * * * *
H 用于分散服务器的负载
有时我们不需要一定在整点执行,如果我们希望在区间中任意时间点执行都可以的话
H可以帮我我们找一个最佳的时间点,分散服务器的压力。
例
每天晚上6点执行
0 6 * * *
这样一定在6点整执行,这时可能会和另一个jenkins任务冲突
H 6 * * *
这样会自动选择在6点到7点之间的一个比较空闲的时间执行
可能在6:01,也可能在6:59
5.在“Build”中输入maven的构建命令:
clean package -Dmaven.test.skip=true
6.在“Post Steps”中勾选“Run only if build succeeds”
7.在构建中,选择增加构建步骤,选择”execute windows batch commands“
8.输入运行环境的命令:
set BUILD_ID=DONTKILLMEset port=8888
for /f "tokens=1-5" %%i in ('netstat -ano^|findstr ":%port%"') do taskkill /pid %%m -t -fxcopy C:\Users\HP\.jenkins\workspace\test01\target\crud_demo-0.0.1-SNAPSHOT.jar D:\work_code\crud_demo\target\ /Y
echo 复制Jar包完成
start javaw -jar -Xms512m -Xmx1024m -Xmn512m D:\work_code\crud_demo\target\crud_demo-0.0.1-SNAPSHOT.jar
exit
以上命令释义:
第1行:set BUILD_ID=DONTKILLME
重新设置构建ID,防止Jenkins构建进程结束后,杀掉关联进程,即防止构建进程结束后,将构建的jar项目也同步停止
第3行:set port=8888
指定端口。这里的端口,需要与 Spring Boot 项目中的 yaml 文件配置的端口一致,主要是用来关闭当前端口的进程,用来重新构建。
第4行:for … do taskkill …
关闭8888端口的相关进程。
第6行:xcopy X Y /Y
将X文件复制到Y目录下,/Y是禁止提示以确认改写一个现存目标文件,即覆盖文件的时候,不需要提示,直接覆盖。
这里有两个问题:
1、X 文件是怎么知道的呢?
对于每个构建任务,都有构建历史,访问每个构建历史记录(如果还没构建过可以在IDEA中构建,或者随便输入一个路径,在构建的控制台查看):

可以查看每个构建记录的控制台输出内容,其中就有构建完成的jar包的详细信息:
2、为什么要复制一份?
下次构建的时候,需要删除现有的jar,重新构建新的jar。
如果直接运行生成的jar,下次构建的时候,无法删除,构建失败。
第8行:start javaw -jar XXX.jar
使用java命令启动jar项目。
中间的 -Xms512m -Xmx1024m -Xmn512m 参数是为jar项目分配内存,可以不写。
在第一次配置的时候,第8步暂时跳过,首先生成一个jar包后,确认了jar包的具体位置,再回来添加此配置。
9.点击保存后。
2.5.构建
1.点击"Build Now"开始构建,产生构建报告,如果是“√”则构建成功,如果是“×”则构建失败(失败原因可以查看控制台):
3.自动集成的提现
在上面的步骤中,我们设置了一个触发器,即每间隔1分钟jenkins访问Gitee仓库。此时如果Gitee仓库更新,则会触发Jenkins自动拉去项目进行构建、部署。
我们在项目根目录下创建了一个文本文件,并再次提交成功:
间隔一分钟后,Jenkins也完成了自动构建:
动集成的提现
在上面的步骤中,我们设置了一个触发器,即每间隔1分钟jenkins访问Gitee仓库。此时如果Gitee仓库更新,则会触发Jenkins自动拉去项目进行构建、部署。
我们在项目根目录下创建了一个文本文件,并再次提交成功:
[外链图片转存中…(img-wrayEukD-1744772988098)]
[外链图片转存中…(img-wgqKnorE-1744772988098)]
间隔一分钟后,Jenkins也完成了自动构建: