如何使用命令行配置Jenkins从机作为Windows服务运行?

16
我想使用命令行创建Jenkins从节点。这里有一个关于将Jenkins从节点设置为Windows服务的文档,我按照指示操作。我可以运行javaws http://10.121.33.4:8080/computer/Test-Jenkins-Slave-2/slave-agent.jnlp来连接从节点到主节点,但问题是重启机器后会断开连接。
我认为最好的方法是将从节点安装为服务。因此,我再次尝试按照该页面上的说明进行操作。我已经将Jenkins从节点安装为服务,并添加了以下注册表键值。
服务属性: enter image description here 注册表键值: enter image description hereenter image description here 我想知道是否有错误?文档是否缺少内容?

设置完服务后会发生什么?它不会启动吗?它不会自动启动吗? - Slav
它开始运行然后停止了,事件日志上没有记录。 - Anonymous
请验证在端口8080上没有其他进程正在运行。 - Slav
请按照以下说明进行操作:https://support.cloudbees.com/hc/en-us/articles/217423827-How-to-Install-Several-Windows-Slaves-as-a-Service。 - luka5z
5个回答

27
(最后更新日期:2019-09-20) 我发现安装Jenkins Worker/Slave作为服务的最快、最可靠的方法是:
1. 从Jenkins的"/slave-agent.jnlp"端点下载jnlp文件。 2. 启动"slave-agent"图形界面。 3. 从图形界面中选择"安装为服务"选项。
以下是详细步骤和图片。
注意:不必修改注册表,嵌入式安装使得整个过程快速、简单且可重复。
假设您已经配置了一个名为"amberboch"的节点。在Worker/Slave(即"amberboch")机器上:
  1. 打开浏览器,输入Jenkins的URL以创建新节点(或者在Jenkins的“节点”页面中点击节点),按照通常的方式在Jenkins中创建节点。
  2. 节点创建完成后,进入节点(Jenkins > 节点 > amberboch),在浏览器的URL末尾加上"/slave-agent.jnlp"(例如"http://jenkins:8080/computer/computer/amberboch**/slave-agent.jnlp**")来下载jnlp文件。 注意手动添加"slave-agent.jnlp" 保存文件
  3. 管理员权限执行slave-agent.jnlp文件。(你可能需要指定Java/javaws以"Java(TM) Web Start Launcher"启动它) (或者,你可以使用Pau Sabats在JENKINS-29616中提供的格式创建一个新的代理jar文件,该文件应该保留连接信息:java -jar newAgent.jar -jnlpUrl http://jenkins:8080/computer/amberboch/slave-agent.jnlp -secret xxxxxxxx -workDir "E:\JenkinsClient"
  4. 从slave-agent.jnlp的GUI中选择"File" => "Install as a service"选项
一旦服务安装完成,根据您的特定安装需求,可以随时更改服务的“登录”凭据。如果在管理员模式下运行时发生作业运行并创建了工作空间子文件夹(因为任何已运行的作业都将以前的管理员特权用户身份运行),则可能需要重置权限或删除工作空间中的目录,而常规的Jenkins用户配置文件可能没有适当的权限访问旧的工作空间文件夹和文件。
希望这能帮助您节省时间和管理(在我看来)我遇到的最佳CI选项时的头疼。
最好的问候, Rob
附注 - 我找到了另一个讨论,可能也会有所帮助:在命令行中安装Jenkins从属服务于Windows
(更新于2023年11月3日) 随着Java的更新版本,这种方法已经过时了。 请参考Cloud Bees的这篇文档: https://docs.cloudbees.com/docs/cloudbees-ci-kb/latest/client-and-managed-controllers/how-to-install-windows-agents-as-a-service

1
Robert,我该如何启动那个 .jnlp 文件?当我使用 javaws slave-agent.jnlp 启动它时,程序会显示:服务器拒绝了连接:没有接受任何协议 - Anton Shepelev
从JENKINS-29616:尝试的示例: java -jar agent.jar -jnlpUrl http://jenkinsurl:port/computer/windows-agent/slave-agent.jnlp -secret xxxxxxxx -workDir "C:\JenkinsSlave" - Robert
1
问题已解决——我还有另一个连接到 Jenkins 的活动状态。很抱歉没有及时告诉您。 - Anton Shepelev
@Ant_222,你解决了问题,并留下了一个很好的工具,供遇到相同问题的人使用。非常棒,谢谢你,做得好! - Robert
我在JNLP GUI中找不到“文件/安装为服务器”菜单。我看到一个带有“已连接”消息的小窗口。我能做的唯一事情就是关闭它。请帮助我解决这个问题。我也尝试了其他命令行,它成功了,但我没有看到任何安装为服务的选项。 - tarekahf
显示剩余3条评论

2
我已经取得了

  • jenkins.exe
  • jenkins.exe.config
  • jenkins.xml
从Jenkins“主”安装中获取。 接下来,我已经调整了XML以包含我的从机的启动参数。这会得到类似于:
<executable>%JAVA_HOME%\bin\java.exe</executable>
  <arguments>-Xrs -Xmx256m -Dhudson.lifecycle=hudson.lifecycle.WindowsServiceLifecycle -jar "C:\Tools\jenkins_slave\slave_95\agent.jar" -jnlpUrl http://jenkins_master:9090/computer/slave_95/slave-agent.jnlp -secret 999999999999999999999999999999999999999999 -workDir "C:\jenkins_slaves_workdir"</arguments>

在XML文件中,我还做了以下修改: - 将id、name和description字段编辑为我喜欢的样式 - 删除了“extensions”块的内容
之后,我只需在从机上使用管理员shell运行Windows服务,执行以下命令即可:
sc create <service_name> binpath= "C:\Tools\jenkins_slave\slave_95\Jenkins.exe" start= auto

这基本上与启动Jenkins主服务相同。


1
这种方法确实是最灵活的。在管理员权限的cmd.exe控制台中运行jenkins.exe install也比sc create [...]更容易使用。 - starlocke

1

将Jenkins节点(从属)设置为服务的最简单方法是使用https://nssm.cc/

  1. 将nssm解压缩到C:\驱动器中
  2. 运行命令 -> C:\nssm-2.24\win54>nssm install "JenkinsAgent"
  3. 在弹出窗口中,您可以提供Jenkins中可用的startagent.bat的路径

您还可以配置要用于运行Jenkins作业的用户。

Screenshot


1

虽然其他答案都很有效,但如果您像我一样,希望在JavaWebstart死亡后(当Oracle成为邪恶帝国)获得完全相同的代理体验,并且无法再启动JNLP文件...这里就是解决方法...

Java代理(从属)GUI可以通过一个名为WinSW(https://github.com/winsw/winsw)的开源软件包来配置代理作为Windows服务。

您需要做的就是将此工具与Jenkins控制台在节点配置屏幕中提供给您的启动指令结合使用。尽管在Jenkins的用户指南中奇怪地没有提到,但Cloudbees在这里提供了有关它的KB:https://docs.cloudbees.com/docs/cloudbees-ci-kb/latest/client-and-managed-masters/how-to-install-windows-agents-as-a-service

总之:

  • 确保已安装OpenJDK 17并在系统路径中,以便“java”在任何目录中都可以使用
  • 创建一个代理文件夹
  • 从Jenkins服务器(请参见节点配置屏幕中的URL)下载Agent.jar的副本到该文件夹中
  • 从这里https://github.com/winsw/winsw获取WinSW-x64.exe的副本并将其放置在文件夹中
  • 从WinSW存储库中的模板文件创建WinSW-x64.xml,并填写各种信息,如服务名称等...
  • 运行WinSW-x64.exe INSTALL(注意:您也可以运行UNINSTALL)

如果您查看旧Java GUI中的Windows服务安装,您将看到它们创建了jenkins-slave.exe,即WinSW-x64.exe,实际上您可以简单地重命名WinSW-x64.exe,但如果这样做,则必须使.xml文件匹配以使INSTALL命令起作用。

干杯!


0

使用任务计划程序来处理从属代理也适用于我。 - W. Dan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接