23

我最近继承了一个由 Jenkins 驱动的 Java 项目,该项目的主要开发人员刚刚升级并退出。他已将 Jenkins WAR 部署到虚拟服务器上的 Tomcat 实例上,这就是所谓的“构建服务器”。

该构建服务器配置了一个从属服务器,用于构建和部署到myserver.example.com另一个虚拟服务器。上周末,系统人员停用了myserver.example.com虚拟机所在的物理服务器,为配置为部署到该从站的任何 Jenkins 作业产生了以下异常:

在此处输入图像描述

当我单击“查看日志以获取更多详细信息”链接时,我看到以下控制台输出:

[03/18/13 08:13:31] [SSH] Opening SSH connection to myserver.example.com:22.
java.io.IOException: There was a problem while connecting to myserver.example.com:22
    at com.trilead.ssh2.Connection.connect(Connection.java:755)
    at com.trilead.ssh2.Connection.connect(Connection.java:546)
    at hudson.plugins.sshslaves.SSHLauncher.openConnection(SSHLauncher.java:650)
    at hudson.plugins.sshslaves.SSHLauncher.launch(SSHLauncher.java:283)
    at hudson.slaves.SlaveComputer$1.call(SlaveComputer.java:200)
    at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
    at java.util.concurrent.FutureTask.run(FutureTask.java:138)
    at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
    at java.lang.Thread.run(Thread.java:662)
Caused by: java.net.NoRouteToHostException: No route to host
    at java.net.PlainSocketImpl.socketConnect(Native Method)
    at java.net.PlainSocketImpl.doConnect(PlainSocketImpl.java:351)
    at java.net.PlainSocketImpl.connectToAddress(PlainSocketImpl.java:213)
    at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:200)
    at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:366)
    at java.net.Socket.connect(Socket.java:529)
    at com.trilead.ssh2.transport.TransportManager.establishConnection(TransportManager.java:342)
    at com.trilead.ssh2.transport.TransportManager.initialize(TransportManager.java:450)
    at com.trilead.ssh2.Connection.connect(Connection.java:699)
... 9 more
[03/18/13 08:13:34] [SSH] Connection closed.

这是有道理的,因为从属(myserver.example.com虚拟)处于离线状态。但是,以前没有真正的 Jenkins 经验,我不确定配置 Jenkins 主服务器以将这些作业构建/部署到新从属设备的正确步骤,以及如何设置新从属设备。例如,我是否需要在新的从属设备上安装任何东西,或者进行任何类型的设置/配置?提前致谢!

4

2 回答 2

36

在 Jenkins 中添加一个 slave 非常简单。基本上,如果您使用的是 unix 从站,则需要通过 SSH 访问机器。您还需要安装Jenkins SSH Slaves 插件。完成后,转到Master上的Manage Jenkins选项,然后选择Manage Nodes

那么步骤是:

  1. 单击新建节点
  2. 选择Dumb Slave并给它一个名字(象征性的,不需要是域名,后面会出现)
  3. 点击确定,进入配置页面
  4. 使用您要在该节点上运行的同时进程数填写执行器数(通常不超过分配的 CPU 内核数)
  5. 使用您希望 Jenkins 存储其工作文件的位置的完整路径填写Remote FS Root
  6. 如果您在系统中使用标签,则可以选择添加标签(在许多情况下不需要,但您的项目可能要求节点具有某些标签才能在特定作业的执行器池中)
  7. 在启动方法下选择通过 SSH 在 Unix 机器上启动从代理(如果尚未选择)
  8. 将完全限定的域名放在Launch Method行下的Host字段中

关于安装在从站上的工具有一些假设。如果您有专门的工具,您可能需要单独安装它们(或查看在执行前立即处理移动工具的插件)。但是,如果您的节点是基于一个模板构建的,该模板上有您所有的构建工具(可能是 java、ant 等),那么这就是您需要做的所有事情。

于 2013-03-18T13:07:21.340 回答
0

我遇到了同样的问题,就我而言,这是因为我没有在 Ubuntu 上安装 ssh 服务器。

于 2017-09-04T22:03:35.530 回答