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

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

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

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

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

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

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

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

    **当前解决方案**-低于最佳
    现在,我不能使用 Jenkins 的奴隶功能。取而代之的是,我使用一系列构建步骤-在主服务器上运行-使用Windows和PowerShell脚本来启动VM,进行配置并重新启动它。 VM上运行着SSH服务器,我使用该服务器将测试文件上传到测试VM,然后远程执行它们。然后将结果下载回 Jenkins ,以供工作处理。该解决方案是实用的-但比典型的Jenkins从属方法要多得多的工作。而且,这些脚本针对的是单个VM。我不能轻易使用奴隶池。

    最佳答案

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

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

    关于hudson - 作为构建的一部分,重新​​配置并重新启动Hudson/Jenkins从属服务器,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/5543413/

    10-09 07:01