使用Jenkins打包项目可以避免手动打包上传部署,节省了不少时间,有利于团队开发。我所部署的项目是SpringBoot,版本控制使用的是SVN
Windows下Jenkins的安装详见另一篇文章
设置Maven安装路径
Jenkins面板中选择Maven Jenkins,点击Global Tool Configuration
找到Maven安装,新增maven,填入maven的Name和MAVEN_HOME,这里我用的是我本地安装的maven,设置完点击保存即可。
安装Subversion和publish-over-ssh
这里我已经安装了Subversion Plug-in,没有安装的在可选插件里查找然后安装
安装publish-over-ssh
进入Manage Jenkins中选择Configure System
找到Shell,填入本地的cmd.exe路径,不然会报错
安装PowerShell Server 2016和配置Jenkins中的SSH Server
Powershell Server百度云链接如下:
链接:https://pan.baidu.com/s/1Q2o-83wSD0vTkqSLyGtJaA
提取码:vfii
设置开启自启动
选择当前Windows用户中的Administrators作为登录账户
勾选SFTP Features中两个选型,设置D盘的文件夹为上传的主目录
在Manage Jenkins中打开Configure System
找到Publish over SSH
找到SSH Servers,填入Jenkins要部署的那个服务器的别名、主机名IP、登录用户名、远程上传目录
开始配置SpringBoot项目部署流水线
点击新建Item项目
选择构建一个maven项目,输入项目名称
选择Subversion,因为我用的是svn版本控制,填入项目url,svn的账户密码
在构建环境中勾选Send files or execute commands over SSH after the build runs(在本地构建项目完成后发送文件或者执行命令到远程服务器),选择之前配置好的SSH Server,Transfer Set设置Source files(本地Jenkins的相对目录路径),Remove prefix(去除多余的路径前缀),Remote directory(远程目标上传目录路径)
路径详解:
(C:\Users\Administrator\.jenkins\workspace\测试环境后台包)此路径是Jenkins创建的部署流水线编译打包后的项目路径,(D:\root)此路径是远端服务器上传文件的根目录,也就是Jenkins本地包上传的根目录,Source files可以设置为test\lib\**,remove prefix可以设置为test\lib\,Remote directory设置为\lib,意思就是我要上传C:\Users\Administrator\.jenkins\workspace\测试环境后台包\test\lib文件夹下的所有文件,并且去除test\lib\前缀,最终上传至远端服务器的D:\root\lib目录下。
Send files or execute commands over SSH after the build runs的另一个功能就是在远端服务器执行命令行,如下图所示执行windows的cmd命令,意思是第一步进入c盘,第二步进入C盘的C:\Users\Administrator\Desktop(也就是windows桌面),第三步执行test.bat脚本
C:
cd C:\Users\Administrator\Desktop
start test.bat
test.bat(以D:\root\lib下所有jar包为基础,运行D:\root\test.jar,且将运行的项目进程名称命名为test)
@echo off
START "test" java -Dloader.path=D:\root\lib -jar D:\root\test.jar
流水线中还有一个功能就是前置步骤,在打包编译前执行的命令,这里也选择Send files or execute commands over SSH,可以对远端服务器执行命令,选择之前配置好的SSH Server,在Exec command中填入如下脚本。(脚本注解:进入C盘,进入C盘的C:\Users\Administrator\Desktop,执行killTest.bat脚本)。
C:
cd C:\Users\Administrator\Desktop
start killTest.bat
killTest.bat(强制杀死进程名为test的进程)
@echo off
set char=test
echo char : %char%
for /f "usebackq tokens=1-2" %%a in (`jps -l ^| findstr %char%`) do (
echo find process %%a %%b
set pid=%%a
set image_name=%%b
)
echo now will kill process : pid %pid%, image_name %image_name%
taskkill /f /pid %pid%
pause
exit
因为需要编译打包的是maven项目,所以在build模块中填写Goals and options(clean install package -Dmaven.test.skip=true)
最后点击保存