在命令行中将Jenkins slave作为Windows服务安装

时间:2017-06-26 01:05:26

标签: jenkins jenkins-slave

我一直在谷歌上看到如何安装该服务 命令行(所以没有手动交互)但我坚持如何 得到jenkins-slave.exe

我找到了那些指示 https://wiki.jenkins.io/display/JENKINS/Installing+Jenkins+as+a+Windows+service 但我无法弄清楚如何获取可执行文件。我已经下载并运行了 slave.jar用右键连接奴隶,但exe 没有生成。

我找到了这个页面 https://github.com/kohsuke/winsw/blob/master/doc/installation.md#winsw-installation-guide 手动安装,但听起来像是重新发明轮子的时候 罐子可以做到。此外,WinSW.exe存在风险 插件没有更新(我看到了一些自动更新代码)。

那么有没有办法可以下载jenkins-slave.exe或者生成它? 或者有没有办法在命令行中运行“作为服务安装” slave.jar?

3 个答案:

答案 0 :(得分:8)

在联系插件开发者之后回答我自己的问题:

没有直接从Jenkins下载exe的实际方法,slave.jar通过远程协议从master获取它。我创建了一个请求,可以通过URL下载它(如开发人员所建议的那样),因此将来可能会提供。

现在,可执行文件是一个重命名的Windows Service Wrapper二进制文件:https://github.com/kohsuke/winsw所以我以同样的方式使用了这个二进制文件。

关于WinSW和XML文件使用的配置,我使用了GitHub存储库https://github.com/jenkinsci/windows-slave-installer-module中的配置。这些版本在配置方面是兼容的。

所以基本上我下载了exe,从Jenkins获取私钥并使用原始插件中的配置创建服务。然后我使用jenkins-slave.exe install安装服务。

一步一步:

  • 从Jenkins(从Node页面)获取JNLP命令以获取私钥,例如java -jar slave.jar -jnlpUrl http://jenkins...
  • 从Jenkins下载slave.jar文件(来自JNLP命令)
  • 下载服务包装器可执行文件,例如http://repo.jenkins-ci.org/public/com/sun/winsw/winsw/2.1.0/winsw-2.1.0-bin.exe
  • 设置用于运行服务的XML(在模块中可用或直接在winsw网站上)
  • 设置从属配置XML文件(在模块源代码中可用)
  • 然后使用jenkins-slave.exe install
  • 安装服务

答案 1 :(得分:2)

我要做的是:

  • 从Jenkins的节点页面下载slave.jar文件
  • 从节点页面复制java -jar slave.jar -jnlpUrl http://<YOUR URL HERE>命令
  • 将此命令粘贴到新的.bat文件中并保存
  • 注册计划的任务以在Windows启动时运行此.bat文件

答案 2 :(得分:1)

  

或者有没有办法在slave.jar的命令行中运行“作为服务安装”?

我不使用jenkins-slave.exe,而是使用自定义脚本来控制我想要为Jenkins奴隶设置的确切环境变量,当使用密钥启动java -jar slave.jar时,您可以在Jenkins主节点页面中查看该新从属节点。

要从主服务器获取slave.jar到从服务器,请从从服务器Windows服务器执行:

curl -o slave.jar https://your.server/jenkins/jnlpJars/slave.jar

要替换jenkins-slave.exe,我使用声明为Windows服务的脚本nssm

该脚本类似于 agent.bat

set PATH=C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Windows\System32\WindowsPowerShell\v1.0
set PATH=D:\Tools\SonarRunner\bin;%PATH%
set M2_HOME=D:\Tools\apache-maven-3.5.0
set PATH=%M2_HOME%\bin;%PATH%
set PATH=D:\Tools\apache-ant-1.9.3\bin;%PATH%
set GH=D:\Tools\Git
set PATH=%GH%\bin;%GH%\usr\bin;%GH%\mingw64\bin;%PATH%
set PATH=%JAVA_HOME%\bin;%PATH%

set WORKSPACE_FOLDER=D:\Jenkins\workspace
set GIT_WORKSPACE_FOLDER=D:\Jenkins\workspace

java -Xmx768m -jar slave.jar -jnlpUrl https://your.server/jenkins/computer/<SlaveName>/slave-agent.jnlp -secret 87ef3d...

该脚本随后被称为Windows服务,由专用用户帐户运行:

runas /user:<domain>\<jenkinsUser> cmd ( enter `jenkinsUser` Windows password )

D:\Tools\nssm-2.24\win64\nssm.exe install <SlaveName> D:\Jenkins\agent.bat

然后配置其Windows服务:

sc config <SlaveName> obj= <domain>\<jenkinsUsers> password= <jenkinsUser password>
sc config <SlaveName> start= auto

要自动安装其他软件,请参阅Chocolatey - Software Management Automation,Windows的软件包管理器。

要完全自动化从属的声明方,请使用Web API创建从属,并使用groovy script to retrieve the Jenkins node/slave secret JnlpMac key
this script for the creation
和groovy脚本(使用Jenkins 2.46或更新版本)获取密钥:

echo 'println jenkins.model.Jenkins.instance.nodesObject.getNode("my-agent")?.computer?.jnlpMac' \
  | java -jar ~/Downloads/jenkins-cli.jar -s https://jenkins/ groovy =