无法通过 SSH 在 Jenkins 中启动从站 - 没有错误

Cannot launch slaves in Jenkins via SSH - no errors

我在 Unix 系统上安装了一个 Jenkins master (OEL)。我配置了两个通过 SSH 启动的 Unix 从站(也是 OEL)。从站永远不会启动,主站的 GUI 中也没有错误报告(根本没有输出,只是一个旋转的球):

我在 jenkins.log 文件中看到的唯一警告是:

WARNING: Cron is not defined. WARNING: Making sc11136233 offline because it’s not responding WARNING: Making sc11136289 (OEL 6.5) offline because it’s not responding

我可以以同一用户身份通过​​ SSH 从主系统连接到从属系统,没问题。我还可以使用 Java 程序从主机连接到从机,就像 Jenkins 使用的同一用户(使用 JSch):`

[jenkins@slcn03vmf0256 debug]$ java -classpath JSch:. SSHExeCommand Establishing Connection to sc11136289... Connection established. Preparing for command execution. Executing command: ls. 1 : bash_logout 2 : bash_profile 3 : bashrc 4 : bashrc-DEFAULT 5 : cshrc 6 : cshrc-DEFAULT 7 : cshrc-DEFAULT.06292004 8 : cshrc-DEFAULT_old 9 : emacs 10 : now.txt 11 : screenrc Done!

master 上的 JDK 版本是:

$ java -version java version "1.7.0_71" Java(TM) SE Runtime Environment (build 1.7.0_71-b14) Java HotSpot(TM) Server VM (build 24.71-b01, mixed mode)

Java 从机上的版本:

$ java -version java version "1.7.0_45" OpenJDK Runtime Environment (rhel-2.4.3.4.0.1.el6_5-x86_64 u45-b15) OpenJDK 64-Bit Server VM (build 24.45-b08, mixed mode)

看起来 Jenkins 根本无法连接到 slave,但我不确定为什么。

  1. 主系统上的$JENKINS_HOME/logs/slaves/SLAVE_NAME 下没有日志文件。每个奴隶的目录都在那里,但它们是空的。
  2. Jenkins 也没有将其任何文件复制到从属系统。
  3. 我尝试在从属系统上观看 /var/log/secure 时启动一个从属系统(相当于 auth.log),但是这个文件没有得到更新。
  4. 当执行我的 Java SSH 测试程序时,我可以在主系统上使用 netstat 看到以下内容:

    [jenkins@slcn03vmf0256 debug]$ netstat -a | grep sc111
    tcp        0      0 slcn03vmf0256:32508 sc11136289:ssh ESTABLISHED
    

    但是,当我尝试从 Jenkins 启动一个 slave 时,netstat returns 在我为 slave grep 时不匹配。

看起来 Jenkins 没有启动任何 SSH 连接。

将 Jenkins 升级到版本 1.607 后,我在尝试启动从站时收到以下错误消息:

ERROR: Unexpected error in launching a slave. This is probably a bug in Jenkins
org.jruby.exceptions.RaiseException: (NameError) undefined local variable or method `listener' for #<Jenkins::Slaves::ComputerListenerProxy:0x1c0ee3>
at RUBY.preLaunch(/var/lib/jenkins/plugins/nodeofflinenotification/WEB-INF/classes/vendor/gems/bundler/gems/jenkins-plugin-runtime-39cc789729c0/lib/jenkins/slaves/computer_listener_proxy.rb:6)

如前所述,升级到 1.607 后,我在尝试启动从站时收到一条错误消息:

ERROR: Unexpected error in launching a slave. This is probably a bug in Jenkins
org.jruby.exceptions.RaiseException: (NameError) undefined local variable or method `listener' for #<Jenkins::Slaves::ComputerListenerProxy:0x1c0ee3>
at RUBY.preLaunch(/var/lib/jenkins/plugins/nodeofflinenotification/WEB-INF/classes/vendor/gems/bundler/gems/jenkins-plugin-runtime-39cc789729c0/lib/jenkins/slaves/computer_listener_proxy.rb:6)

这导致我在 Jenkins 中遇到以下错误:

我卸载了 ruby-runtime 插件并再次通过 SSH 启动从服务器。

我遇到另一个 "weird" 导致从服务器无法启动的原因。

用于 ssh 的用户 jenkins 的 .bashrc 包含带有 "su root" 的行,这导致 slave 在 ssh init 上挂起。

我的日志结尾是这样的:

[04/24/17 11:19:50] [SSH] Checking java version of java
[04/24/17 11:19:55] [SSH] java -version returned 1.7.0_80.
[04/24/17 11:19:55] [SSH] Starting sftp client.

只需删除这个愚蠢的 su 命令就可以了。