gpt4 book ai didi

hudson - 作为构建的一部分,重新​​配置并重启 Hudson/Jenkins slave

转载 作者:行者123 更新时间:2023-12-04 01:01:10 29 4
gpt4 key购买 nike

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

  • 一旦 Jenkins 作业开始在从站上运行,从站就不能关闭或断开与服务器的网络连接,否则 Jenkins 立即无法通过测试。通常,我会说这是完全可取的行为。但在这种情况下,我希望 Jenkins 接受中断,直到从站重新上线并且 Jenkins 可以重新连接到它 - 或者从站重新连接到 Jenkins。
  • 在已附加到从站的作业中,我需要在 Jenkins 主站上运行一些构建任务 - 而不是在从站上。

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

    编辑 - 进一步解释
    我真的非常喜欢 Jenkins slave 架构。结合已经可用的插件,它可以很容易地将作业分配给从站,运行,并将结果拉回。并且能够选择任何匹配的从站允许自 Action 业/测试分配。

    在我们的情况下,我们使用虚拟化 (VMware) 从机。编写一个脚本很容易,让 Jenkins 使用 VMware PowerCLI 在需要在从站上运行时启动 VM,然后将作业发送给它并将结果拉回。都很好。

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

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

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

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

    最佳答案

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

    一个更好的策略是在你的从机上运行两个节点。需要在Jenkins中配置两个节点。我在一个 unix slave 上成功地使用了这个策略。原因是我需要设置不同的环境变量,我不想把它推到工作中。我使用了 ssh 客户端,所以我不知道是否可以使用不同的客户端类型。您可以同时运行两个测试,或者链接作业或使用上面提到的主策略。

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

    29 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com