小编典典

作为构建的一部分,重新​​配置并重新启动Hudson / Jenkins从属服务器

jenkins

我有一个詹金斯(Hudson)服务器设置,可以在各种从属计算机上运行测试。我要做的是重新配置从属服务器(使用远程API),重新启动从属服务器,以便他的更改生效,然后继续进行其余的测试。到目前为止,我遇到了两个障碍:

  1. 一旦Jenkins作业开始在从属服务器上运行,则从属服务器将无法关闭或断开与服务器的网络连接,否则Jenkins会立即使测试失败。通常,我会说这是完全可取的行为。但是在这种情况下,我希望Jenkins接受中断,直到从属服务器重新联机并且Jenkins可以重新连接到它-或从属计算机重新连接到Jenkins。
  2. 在附属于奴隶的工作中,我需要在Jenkins主人上而不是奴隶上运行一些构建任务。

这可能吗?到目前为止,我还没有找到使用Jenkins或其任何插件的方法。

编辑-进一步说明
我真的非常喜欢Jenkins从属体系结构。与现有的插件结合使用,可以非常轻松地将作业获取到从属服务器,运行并返回结果。而且,能够选择任何匹配的从属设备允许自动分配作业/测试。

在我们的情况下,我们使用虚拟化(VMware)从属计算机。编写脚本足以使Jenkins在需要在从属服务器上运行时使用VMware
PowerCLI启动VM,然后将作业交付给它并拉回结果。都好。

除了 每个测试的部分设置是以某种方式稍微重新配置虚拟机。禁用UAC,以其他用户身份登录,安装不同的驱动程序,等等-
这些更改中的每一个都要求重新启动测试VM
/从属服务器,然后更改才会生效。尽管我可以编写处理此重新配置并重新启动的从属按需脚本(启动方法=通过在主机上执行命令来启动从机),但必须在运行作业之前完成它。那就是问题所在的所在-
我无法及早配置从属服务器,因为配置更改的类型取决于正在运行的作业,该作业仅在从属服务器启动后才会发生。

可能的解决方案
1)在单个VM上使用多个从属实例。这行不通-
几种配置是互斥的,但是Jenkins不知道。因此,它将尝试为一个作业启动一个从属配置,为另一个作业启动另一个从属配置-
两个从属都将在同一VM上。锁定作业不会阻止此操作,因为从属启动不是作业的一部分。

2)(最佳)一个构建步骤,使作业可以知道其从属连接可能已中断。构建步骤可能必须包含一些选项,以便Jenkins知道如何重新连接从属设备(将自动重新连接从属设备,Jenkins必须运行脚本,简单的SSH就足够了)。构建步骤将处理从属服务器的断开连接,忽略通常失败的断开连接,然后执行重新连接。一旦从站备份并运行,就可以进行下一个构建步骤。如果从属设备在一定时间内无法重新连接,则超时可能会使作业失败。

当前解决方案-并非最佳选择
现在,我无法使用Jenkins的从属函数。相反,我使用了一系列构建步骤-在主服务器上运行-
使用Windows和PowerShell脚本打开虚拟机电源,进行配置,然后重新启动它。VM上运行着SSH服务器,我使用该服务器将测试文件上传到测试VM,然后远程执行它们。然后将结果下载回詹金斯,以供工作处理。该解决方案是实用的-
但比典型的Jenkins从属方法要多得多的工作。此外,脚本针对的是单个VM。我不能轻易使用奴隶池。


阅读 309

收藏
2020-07-25

共1个答案

小编典典

好简单。您创建了一个在Master上运行的Master作业,从该Master作业中您将客户端作业称为构建步骤(这是一种新的构建步骤,我喜欢它)。您需要检查主作业应等待客户端作业完成。然后,您可以运行脚本以重新配置客户端,并在客户端上运行第二个测试。

更好的策略是在从属计算机上运行两个节点。您需要在Jenkins中配置两个节点。我在Unix从站上成功使用了该策略。原因是我需要设置不同的环境变量,而我不想将其推入工作。我使用了ssh客户端,所以我不知道使用不同的客户端类型是否可行。比起您可以同时运行两个测试,或者链接作业或使用上面提到的主策略,您可能会比。

2020-07-25