【问题标题】:How to setup Jenkins Slave to run as a windows service using command line?如何使用命令行将 Jenkins Slave 设置为作为 Windows 服务运行?
【发布时间】:2014-08-06 23:19:07
【问题描述】:

我想使用命令行创建一个 jenkins slave。这是一个document,关于将 jenkins slave 设置为 Windows 服务,我按照那里的说明进行操作。我可以运行javaws http://10.121.33.4:8080/computer/Test-Jenkins-Slave-2/slave-agent.jnlp将slave连接到master,但问题是机器重启后会断开连接。

我认为最好的方法是将 slave 安装为服务。因此,我尝试再次按照该页面上的说明进行操作。我已将 jenkins Slave 作为服务安装,并添加了如下所示的注册表项。

服务的属性:

注册表值:

我想知道我是否做错了什么?文件是否遗漏了什么?

【问题讨论】:

  • 那么设置服务后会发生什么?它不开始吗?它不会自动启动吗?
  • 它启动和停止,没有登录事件日志。
  • 验证8080端口上没有其他进程正在运行
  • 尝试按照support.cloudbees.com/hc/en-us/articles/…的说明进行操作。

标签: jenkins windows-services continuous-integration registry


【解决方案1】:

服务可能需要在系统启动后显式启动。您可能需要:

  1. 转到“登录”选项卡并以具有计算机管理权限的用户身份启动服务

  1. 通过 Windows 调度程序通过此处的说明启动 jenkins 代理:https://wiki.jenkins-ci.org/display/JENKINS/Launch+Java+Web+Start+slave+agent+via+Windows+Scheduler

【讨论】:

  • 使用 task-scheduler 处理 slave-agent 也适用于我。
【解决方案2】:

(最后2019-09-20) 我发现将 Jenkins Worker/Slave 作为服务安装的最快和最可靠的方法是:

  1. 从 Jenkins 的“/slave-agent.jnlp”端点下载 jnlp 文件
  2. 调出“从代理”GUI
  3. 从 GUI 中选择“作为服务安装”选项

详细步骤和图片如下。

注意:不要费心修改注册表,嵌入式安装使过程快速、简单且可重复。

假设您已经配置了一个名为“amberboch”的节点。在工人/奴隶(即“amberboch”)机器上:

  1. 打开浏览器并输入新节点的 Jenkins URL(或单击 Jenkins 的“节点”页面中的节点),然后像往常一样在 Jenkins 中创建节点。
  2. 创建节点后,导航到节点 (Jenkins > Nodes > amberboch) 并在浏览器 URL 的末尾包含“/slave-agent.jnlp”(例如 “http://jenkins:8080/computer/computer/amberboch**/slave-agent.jnlp**”) 下载 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 中选择“文件”=>“作为服务安装”选项

安装服务后,根据需要更改服务的“登录”凭据以用于您的特定安装。如果在管理员模式下运行时碰巧运行了一个作业并因此创建了一个工作空间子文件夹(因为任何已运行的作业都会这样做),您可能必须重置权限或删除工作空间内的目录前 administrator-privilaged 用户,而常规 Jenkins 用户配置文件可能没有对旧工作区文件夹和文件的适当权限。

我希望这有助于节省您管理(恕我直言)我遇到的最佳 CI 选项的时间和麻烦。

最好的问候, 抢

PS - 我发现了另一个可能也有帮助的讨论:Install Jenkins slave as a Windows service in command line

【讨论】:

  • 罗伯特,我如何启动 .jnlp 文件?当我用javaws slave-agent.jnlp 启动它时,程序说:服务器拒绝连接:没有接受任何协议
  • @Ant_222,我还没有亲眼看到这个错误,希望我有一个更可靠的答案。遇到这个问题的似乎不止你一个人,甚至还有一个 Jenkins bug #。如果您找到答案,请将其发回此处或其他 StackOverflow 线程(参考下文),因为它可能对其他人有所帮助。与此同时,也许这些参考资料可以提供帮助: - JENKINS-29616:issues.jenkins-ci.org/browse/JENKINS-29616 - StackOverflow stackoverflow.com/questions/35309316/… 最好的问候,罗伯特
  • 来自 JENKINS-29616:示例尝试:java -jar agent.jar -jnlpUrl jenkinsurl:port/computer/windows-agent/slave-agent.jnlp -secret xxxxxxxx -workDir "C:\JenkinsSlave"
  • 问题已解决——我与 Jenkins 的另一个连接处于活动状态。请原谅我一发现就没有告诉它。
  • @Ant_222,你想通了,然后给遇到同样情况的人留下了一个很棒的神器。太好了,谢谢你,干得好!
【解决方案3】:

我已经拿了

  • jenkins.exe
  • jenkins.exe.config
  • jenkins.xml

来自 Jenkins 'master' 安装。 接下来,我调整了 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 字段 - 删除了“扩展”块的内容

之后,我可以使用以下命令在从属设备上启动运行管理 shell 的 windows 服务:

sc create <service_name> binpath= "C:\Tools\jenkins_slave\slave_95\Jenkins.exe" start= auto

这在原理上与启动 Jenkins 主服务相同。

【讨论】:

  • 这个方法真的是最灵活的。管理员提升的cmd.exe 控制台中的jenkins.exe install 也比sc create [...] 更易于使用
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-01-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-11-25
  • 1970-01-01
相关资源
最近更新 更多