环境
操作系统:windows 10
jenkins版本:2.36.1
技术栈
jenkins +WinSW+bat批处理,因为jenkins agent 使用的java技术,同理此方案可用于将jenkins 主控jar注册为服务,也可以用在其他java或exe服务注册上。
WinSW Github地址:https://github.com/winsw/winsw
WinSW Gieee地址:https://gitee.com/zhoudike/winsw.git
实现步骤
步骤一:下载release版本winsw
下载链接:https://github.com/winsw/winsw/releases
步骤二:重命名exe,并创建xml文件
将下载好的WinSW-x64.exe,重命名为agent.exe,并在同级目录创建xml文件
xml文件示例如下:
xml文件可参考WinSW官方仓库给出的例子:
https://github.com/winsw/winsw#sample-configuration-file
jenkin主控端war包注册为服务:
<?xml version="1.0" encoding="UTF-8" ?>
<service>
<id>jenkins</id>
<name>Jenkins</name>
<description>This service runs Jenkins continuous integration system.</description>
<env name="JENKINS_HOME" value="%BASE%"/>
<executable>java</executable>
<arguments>-Xrs -Xmx256m -jar "%BASE%\jenkins.war" --httpPort=8080</arguments>
<log mode="roll"></log>
</service>
jenkin 代理端agent.jar包注册为服务:
<?xml version="1.0" encoding="UTF-8" ?>
<service>
<!-- 该服务的唯一标识 -->
<id>jenkins-agent</id>
<!-- 注册为系统服务的名称 -->
<name>jenkins-agent</name>
<!-- 对服务的描述 -->
<description>jenkins node从节点</description>
<!-- 将java程序添加到系统服务 -->
<executable>start.bat</executable>
<!-- 执行的参数 -->
<!-- 日志模式 这种是exe帮忙收集产生的日志配置,如果jar自带了log的话,也会输出 -->
<!--<logpath>\logs</logpath>-->
<log mode="roll-by-size">
<!-- 归档文件大小,单位是KB -->
<sizeThreshold>3</sizeThreshold>
<keepFiles>8</keepFiles>
</log>-->
<!-- 日志模式 这种是exe不用帮忙收集产生的日志配置 因为jar自带了log输出那一套 -->
<log mode="none"></log>
</service>
步骤三:copy jar文件至agent.exe 同级目录
步骤四:编写jenkins 代理启动脚本
首先判断jar包文件是否存在,如不存在下载jar文件,再执行java启动命令。
注意:需要将http链接替换为你自己jenkins的URL,secret 替换成添加代理时的密钥
chcp 65001
@echo off
set path=%JAVA_HOME%;%path%;
rem 判断当前目录agent.jar是否存在,如不存在下载至当前目录
if not exist "%cd%\agent.jar" ( curl.exe -sO "http://192.168.1.108:8080/jnlpJars/agent.jar")
java -jar agent.jar -jnlpUrl http://192.168.1.108:8080/computer/pub/jenkins-agent.jnlp -secret f88fa9e15b32665b8c71bbcee3676a612e8ea7fd871d6642157cd8a5708f0718 -workDir "D:/jenkins"
步骤五:编写服务管理工具脚本
chcp 65001
@echo off
Title Jenkins
Color 0A
:caozuo
echo.
echo ******************************************
echo 【Jenkins 服务操作】
echo 1.安装服务
echo 2.卸载服务
echo 3.停止服务
echo 4.启动服务
echo 5.重启服务
echo 6.刷新服务
echo 7.查看服务
echo 0.退出
echo ******************************************
echo.
set /p n=输入操作号:
if "%n%"=="" cls&goto :caozuo
if "%n%"=="1" call :1
if "%n%"=="2" call :2
if "%n%"=="3" call :3
if "%n%"=="4" call :4
if "%n%"=="5" call :5
if "%n%"=="6" call :6
if "%n%"=="7" call :7
if "%n%"=="0" exit
pause
goto :eof
:1
echo 安装服务
cd /d "%~dp0"
agent.exe install
goto :caozuo
:2
echo 卸载服务
cd /d "%~dp0"
agent.exe uninstall
goto :caozuo
:3
echo 停止服务
cd /d "%~dp0"
agent.exe stop
echo 服务状态
call :7
goto :caozuo
:4
echo 启动服务
cd /d "%~dp0"
agent.exe start
echo 服务状态
call :7
goto :caozuo
:5
echo 重启服务
cd /d "%~dp0"
agent.exe restart
echo 服务状态
call :7
goto :caozuo
:6
echo 刷新服务
cd /d "%~dp0"
agent.exe refresh
echo 服务状态
call :7
goto :caozuo
:7
echo 查看服务状态
cd /d "%~dp0"
agent.exe status
goto :caozuo
步骤六:执行管理工具脚本,安装服务,再启动服务
注意:安装完服务后不会自启,需要执行启动操作才可启动