【问题标题】:Windows Slaves stick in suspended status - Using Azure VM Agents PluginWindows 从站处于挂起状态 - 使用 Azure VM 代理插件
【发布时间】:2018-05-28 08:54:18
【问题描述】:

在我重新启动从属 Azure VM(维护)后,我的 Windows 从属被挂起,当从属重新启动并运行并成功连接到 Jenkins 时,挂起状态没有被删除。

p>

我已经复制了 3 次 - 对于每个 VM,我一直在手动安装额外的软件,这需要重新启动,但在重新启动后,我安排的任何构建作业都会挂起并显示消息“等待 Windows 上的下一个可用执行程序” ,从节点在 Jenkins 中显示为在线,但旁边有“(暂停)”,然后 Azure VM 代理插件最终会创建一个新 VM 并在其上运行构建。

从日志中提取:

2018 年 5 月 25 日下午 3:47:29 hudson.remoting.SynchronousCommandTransport$ReaderThread 运行严重: 通道 slavew823810 java.io.IOException 中的 I/O 错误:意外 通道终止于 hudson.remoting.SynchronousCommandTransport$ReaderThread.run(SynchronousCommandTransport.java:77) 引起:java.io.EOFException at java.io.ObjectInputStream$PeekInputStream.readFully(ObjectInputStream.java:2679) 在 java.io.ObjectInputStream$BlockDataInputStream.readShort(ObjectInputStream.java:3154) 在 java.io.ObjectInputStream.readStreamHeader(ObjectInputStream.java:862) 在 java.io.ObjectInputStream.(ObjectInputStream.java:358) 在 hudson.remoting.ObjectInputStreamEx.(ObjectInputStreamEx.java:48) 在 hudson.remoting.AbstractSynchronousByteArrayCommandTransport.read(AbstractSynchronousByteArrayCommandTransport.java:35) 在 hudson.remoting.SynchronousCommandTransport$ReaderThread.run(SynchronousCommandTransport.java:63)

2018 年 5 月 25 日下午 3:47:34 hudson.model.AsyncPeriodicWork$1 运行信息: 已启动 Azure VM 代理清理任务 2018 年 5 月 25 日下午 3:47:34 com.microsoft.azure.vmagent.AzureVMAgentCleanUpTask 执行信息: AzureVMAgentCleanUpTask:执行:2018 年 5 月 25 日下午 3:47:34 开始 com.microsoft.azure.vmagent.AzureVMAgentCleanUpTask 执行信息: AzureVMAgentCleanUpTask:执行:以 5 分钟超时运行 clean 2018 年 5 月 25 日下午 3:47:34 com.microsoft.azure.vmagent.AzureVMAgentCleanUpTask cleanVMs 信息: AzureVMAgentCleanUpTask:cleanVMs:节点 slavew56f680 被阻止 清理 2018 年 5 月 25 日下午 3:47:34 com.microsoft.azure.vmagent.AzureVMManagementServiceDelegate virtualMachineExists 信息:AzureVMManagementServiceDelegate: virtualMachineExists:检查 slavew823810 2018 年 5 月 25 日下午 3:47:34 com.microsoft.rest.interceptors.LoggingInterceptor 日志信息:

从日志中可以看出,我在 3:47 手动重启了从节点“slavew56f680”。

到 3:54,从节点已备份并运行,因此我单击启动代理,该代理已成功连接(但在 UI 中仍显示已暂停)。

在 3:57 时,我点击构建作业,期望移除挂起状态并在此从站上运行作业。

在 3:59,它移动到另一个从属设备(“slavew823810”)上,将其联机并在其上运行作业。

在这个特定的示例中,slavew823810 是之前发生过这种情况的 Windows 从站,我只是从未删除过它,而是将其重新启动。如果我删除了它,它就会创建一个新的 Windows 从属 VM。

有人见过这个吗?知道如何阻止这种情况发生或删除暂停状态吗?

Jenkins 版本是 2.107.3 我的主 (Linux) 和从 (Windows) 都在 Azure 上。

提前致谢,斯蒂芬。

更新

在周末让我的奴隶断电后,我在 Azure 中启动它们,然后在 Jenkins 中连接(但说已暂停)我开始构建作业 - 结果是,经过长时间的延迟,它创建了另一台 Windows 从属机器来运行该作业在。我现在有 3 个 Windows 从站。我希望它会使用前两台机器中的一台,这样我就不会被阻止,因为它们已经更新了我需要的额外软件和补丁。

【问题讨论】:

    标签: azure jenkins jenkins-plugins jenkins-pipeline


    【解决方案1】:

    尝试系统 groovy 命令(或类似 Azure VM 的命令):

    Jenkins.instance.getNode('Node-Name').getComputer().setAcceptingTasks(true)
    

    似乎没有其他方便的方法可以解除暂停。

    我们在将节点设置为时遇到了类似的困境:

    可用性:“根据计划让该代理上线

    然后将它们翻转回“让这个奴隶尽可能在线” 当他们仍处于停机时间窗口时。节点在线但已挂起。

    找不到任何关于此的文档或为什么没有 GUI 切换选项,如脱机或断开/启动。

    【讨论】:

    • 感谢 Ian 的回复 :-) 我不再从事该项目,团队采取了不同的方式,因此无法验证是否修复。
    • 谢谢!这对我有用,在从“根据时间表让这个代理上线”然后回到“让这个奴隶尽可能在线”之后。
    【解决方案2】:

    对于阅读本文的其他人,“azure vm 代理”插件在处理 azure 返回的错误方面做得很差。您最安全的选择是断开代理,在 azure 中将其关闭,然后从 jenkins 脚本控制台运行以下命令

    Jenkins.instance.getNode('').toComputer().setAcceptingTasks(false); Jenkins.instance.getNode('').toComputer().setEligibleForReuse(true);

    这应该让它回到离线/暂停模式

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-03-01
      • 1970-01-01
      • 2021-09-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多