当前位置: 首页 > 面试题库 >

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

应嘉容
2023-03-14
问题内容

我有一个詹金斯(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。我不能轻易使用奴隶池。


问题答案:

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

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



 类似资料:
  • 问题内容: 我已经从http://jenkins-ci.org/content/thank-you-downloading-windows- installer 下载了“ jenkins-1.501.zip” 。 我已经解压缩了zip文件,并在Windows 7上成功安装了Jenkins。詹金斯的表现不错。我想从控制台停止Jenkins服务。我怎样才能做到这一点?通过控制台/命令行启动和重新启动的

  • 问题内容: 关于它有几个问题,但我总是读同一本书:“如果系统需要资源,该服务将被杀死”或“您无法构建永远运行的服务,因为它在后台运行的次数越多,越容易受到影响。被系统杀死”等等。 我面临的问题是:我的服务运行正常,并且可以预期,如果我运行我的应用程序,然后退出它,我的服务仍在运行,但是当我杀死我的应用程序时(通过转到“最近的应用程序”并对其进行扫描)离开)服务停止。在这一刻,如果我转到设置>>应用

  • 我们在Android8.1及以上版本中偶然发现了一个我们以前从未见过的问题,不幸的是,这使得我们的应用程序对我们的用户来说不太方便。在Android 8.1及以上版本中,当用户刷屏杀死应用程序时,后台粘性服务不会重新启动。

  • Kubernetes文档以及关于重新启动策略的Openshift文档显示,可以使用Always、Never或OnFailure配置POD。 那么我如何从部署配置中做到这一点呢?

  • 当jboss(RHEL)中的一些应用程序的属性或. xml被修改时,是否有必要重新启动jboss服务,或者仅仅通过重新部署(mv。部署。谢啦

  • 我正在尝试将php中的更改为。伊尼。我运行了phpinfo()并验证了加载的配置文件(它位于这里:/Library/Application-Support/appsolute/MAMP-PRO/conf/php.ini)。 每次我编辑这个php.ini文件的值并重启我的MAMP服务器时,php.ini文件似乎都会重置。如果我在重启MAMP后再次打开php.ini文件,它会显示。 为什么MAMP会重