环境

操作系统: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

步骤六:执行管理工具脚本,安装服务,再启动服务

注意:安装完服务后不会自启,需要执行启动操作才可启动

完整示例

Gitee仓库:https://gitee.com/fenglanyi/jenkins_reg_service.git

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐