jenkins后端maven项目部署流程
*环境:* jdk1.8、maven、windows server 2012 r2
*Jenkins主要插件:* Gerrit Trigger 2.36.0、Maven Integration plugin 3.19、Git plugin3.12.0、Windows Exe Runner Plugin 1.2、Publish Over SSH 1.24
*流程简介:* Gerrit Trigger触发构建
-> git拉取临时仓库代码
-> maven打包构建
-> 本地发布(本地整合jar包)
-> ssh远程部署执行发布bat脚本
预备(将jar包制作为windows的服务):
1、下载Winsw.exe
2、编写配置文件sample.xml
<service>
<id>sample</id>
<name>sample</name>
<description>This service runs sample system.</description>
<executable>java</executable>
<arguments>-Xrs -Xmx256m -jar "%BASE%\sample.jar" </arguments>
<log mode="roll" />
<onfailure action="restart" />
</service>
3、修改为同样的名称
把demo.jar、sample.xml、winsw.exe 放到同一目录,并且修改为和jar包同样的名称(同时创建start.bat、stop.bat脚本)
stop.bat(关闭服务,删除jar包)
net stop "服务名称"
set CWD=%~dp0
del /f/s %CWD%"jar包名称".jar
exit 0
start.bat(开启服务)
net start "服务名称"
exit 0
4、安装yingjiapi服务
打开CMD命令行,并切换到jar所在目录,运行 yingjiapi install
命令进行服务安装
一、触发构建
二、拉取临时仓库代码
三、配置settings.xml文件
四、maven打包构建
五、发布步骤(本地整合jar包)
执行windows批处理命令
BUILD_ID=dontKillMe
rem jar包路径
set TARGET_PATHA=gec-manage-api\target
set TARGET_PATHB=hj212-monitor-center\target
rem 运行路径
set BIN_BATH=E:\jenkins\.jenkins\workspace\maven_demo\server
rem 文件名
SET JAR_FILEA=emergency-monitoring-0.0.1-SNAPSHOT.jar
SET JAR_FILEB=hj212-monitor-center.jar
rem 复制源jar到运行环境
COPY /y %TARGET_PATHA%\%JAR_FILEA% %BIN_BATH%\yingjiapi.jar
COPY /y %TARGET_PATHB%\%JAR_FILEB% %BIN_BATH%\yingjisocket.jar
六、构建后操作(ssh远程部署)
stop.bat(关闭服务,删除jar包)
net stop "服务名称"
set CWD=%~dp0
del /f/s %CWD%"jar包名称".jar
exit 0
start.bat(开启服务)
net start "服务名称"
exit 0
总结:
将stop.bat脚本通过Jenkins插件publish-over-ssh传到远程Windows服务器下
并执行windows下的命令cmd /c call C:\stop.bat
stop.bat的内容
@echo off
set port="端口号"
for /f "tokens=1-5" %%i in ('netstat -ano^|findstr ":%port%"') do taskkill /pid %%m -t -f
exit
目的是为了把之前8091端口的服务先关闭
将打包好的jar文件和start.bat上传,截止到这一步都没有问题,命令都能执行。
执行命令cmd /c call C:\start.bat,脚本代码如下
@echo off
start javaw -jar C:\"jar包名称".jar
exit
执行后提示SUCESS
但是jar包并有启动起来。
后来也测试过通过vbs脚本启动,结局还是一样
最终查阅资料将jar包制作成windows的服务可以解决
jenkins前端vue项目部署流程
*环境:* node.js14.13.1、windows server 2012 r2 、nginx 1.12.6
*Jenkins主要插件:* Gerrit Trigger 2.36.0、NodeJS Plugin 1.5.1、Git plugin3.12.0、Windows Exe Runner Plugin 1.2、Publish Over SSH 1.24
*流程简介:* Gerrit Trigger触发构建
-> git拉取临时仓库代码
-> npm本地打包
-> ssh远程部署执行发布bat脚本
预备(服务器部署nginx):
配置好nginx服务,在nginx1.21.6中提前写好stop.bat脚本
用于删除html目录下的dist包
set CWD=%~dp0
rmdir /s/q %CWD%\html\dist
exit 0
一、触发构建
二、拉取临时仓库代码
三、本地构建(下载依赖、打包)
四、远程部署
stop.bat(用于删除html包下原有的dist包)
set CWD=%~dp0
rmdir /s/q %CWD%\html\dist
exit 0
总结:
之前预想的是替换dist包之后需要重启服务刷新的,但jenkins在执行启动脚本时同样也进入到了阻塞状态,最初的解决方案是将修改gerrit的构建结果的返回值,后来测试发现,nginx是有热部署的特性,所以就直接替换了dist包作为最终解决方案。