【问题标题】:Cannot launch slaves in Jenkins via SSH - no errors无法通过 SSH 在 Jenkins 中启动从站 - 没有错误
【发布时间】:2015-03-03 15:23:53
【问题描述】:

我在 Unix 系统 (OEL) 上安装了 Jenkins master。我配置了两个通过 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 从主系统连接到从系统,没问题。我还可以使用 Jenkins 使用的同一用户(使用 JSch)使用 Java 程序从主连接到从站:`

[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)

slave 上的 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 根本无法连接到从站,但我不知道为什么。

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

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

    但是,当我尝试从 Jenkins 启动从属服务器时,当我对从属服务器进行 grep 时,netstat 返回不匹配。

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)

【问题讨论】:

  • 您使用的是 Jenkins 的更新版本吗?可以从slave访问master吗?
  • 您可以使用 netstat 或 lsof 来了解更多详细信息,例如 Jenkins 能够连接,但随后被卡住了。也许詹金斯无法将其 slave.jar 复制到目标?仔细检查您的凭据是否有任何错误。如果可以的话,您还应该检查从属主机上的 auth.log(或等效文件)。
  • 其他一些调试技巧:1) 您的 Jenkins master 是否启用了安全性?如果是这样,请确保您已登录并有权查看从属日志(这是查看或配置从属日志的权限,我将使用配置来确保)。 2) 检查master上的$JENKINS_HOME/logs/slaves/SLAVE_NAME是否有任何内容。
  • 这是 Jenkins 1.590。是的,我也可以通过 ssh 从从站连接到主站。
  • @gareth_bowles $JENKINS_HOME/logs/slaves/SLAVE_NAME 下没有日志文件。每个从站的目录都在那里,但它们是空的。我启用了安全性,只是从矩阵更改为“登录用户可以做任何事情”。我登录了,还是一样的问题。我还启用了“从属到主访问控制”。没有变化。

标签: jenkins


【解决方案1】:

如前所述,升级到 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 启动从站。

【讨论】:

  • 只需更新我所有的 Jenkins 插件就可以为我修复它
【解决方案2】:

我遇到了另一个导致从站无法启动的“奇怪”原因。

用户 jenkins 用于 ssh 的 .bashrc 包含一行带有“su root”的行,这导致从站在 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 命令就可以了。

【讨论】:

    猜你喜欢
    • 2018-03-11
    • 2018-12-12
    • 1970-01-01
    • 2021-01-01
    • 1970-01-01
    • 2023-03-06
    • 2014-08-30
    • 2019-10-25
    • 1970-01-01
    相关资源
    最近更新 更多