前言
Jenkins 工作中主要用在Linux 系统上。目前只是 自己本地开发玩玩CI/CD,所以先在windows上跑个demo。
主要思路
-
新建spring boot demo 项目
- spring boot 打包成可执行jar包需要maven插件支持,官网 initializr 会默认在pom.xml里面加入插件声明
-
构建git环境,准备一个可push 的github仓库
- fork一个别的的项目也可以,关键是代码仓支持本地push上去
-
使用 maven 命令行构建、运行项目
mvn clean install java -jar target/demo-0.0.1-SNAPSHOT.jar
-
安装Jenkins
- 参考官网
- Jenkins 本质上是一个可运行的后台项目,一个war包,在windows 上运行会注册到service上。按官网步骤安装完成后,直接localhost 访问自己设定的口号即可
-
使用Jenkins的功能
- 拉取最新的代码
- 以命令行的形式打包、运行程序
Jenkins 的简单使用
-
建立一个任务
-
配置git仓库
-
配置启动脚本
export BUILD_ID=DONTKILLME
# 代码会默认拉到这个目录(区分于本地目录)
cd C:/ProgramData/Jenkins/.jenkins/workspace/TestDemo
mvn clean install
cd C:/ProgramData/Jenkins/.jenkins/workspace/TestDemo/target
# 端口换成80,避免与本地工程冲突
nohup java -jar demo-0.0.1-SNAPSHOT.jar --server.port=80 &
- 保存后即可构建
windows环境的瓶颈
shell脚本比bat脚本好用太多了,当我想要查出80端口占用的程序并且删掉,cmd中要用到findstr
命令,但是它仅仅返回一行,不支持正则表达式的部分匹配。比如我只想返回PID,这个函数只返回了完整一行,对正则表达式的支持也不够好。
C:\WINDOWS\system32>netstat -ano |findstr "\<0.0.0.0:80\>"
TCP 0.0.0.0:80 0.0.0.0:0 LISTENING 18104
需要完成只提取18104作为输出,还要用到cmd的for
命令,暂时没找到很通用的方案。Linux 的grep
命令很快就能实现。
后记
浅浅认识自动化部署:Jenkins可以帮忙拉取远程仓库,保证代码是最新的。还可以定制启动脚本,让环境与本地隔离(本地有部分代码暂时不想push,那么这种隔离是很有意义的)。后续需要用Linux系统部署Jenkins,并完善整个自动化流程。包括github的hook配置,做到push代码后触发Jenkins自动构建。