【问题标题】:jenkins job on two slaves?詹金斯在两个奴隶上的工作?
【发布时间】:2014-02-20 12:17:36
【问题描述】:

我们需要能够运行消耗两个奴隶的 Jenkins 作业。 (或者,两个作业,如果我们可以保证它们同时运行,并且至少一个知道另一个是什么是可能的。)情况是我们有一个重量级的应用程序,我们需要对其运行测试.测试在一台机器上运行,应用程序在另一台机器上运行。将它们放在同一主机上是不切实际的。

现在,我们有一个 Jenkins 作业,它使用脚本启动专用应用服务器,安装正确的版本、正确的数据,然后针对它运行测试。这意味着当没有进行重量级测试时,我不能使用专用的应用程序服务器来运行其他任务。它也几乎将我们限制在一个循环中。能够动态分配应用程序服务器将允许更多。

在核心 jenkins 中显然没有办法做到这一点,但我希望有一些插件或黑客技术可以做到这一点。当前的测试构建是一个 maven 2 作业,但如果我们必须将它包装在其他东西中,它是可配置的。它由成功完成另一项工作开始,可以更改为开始两个,或其他任何需要。

【问题讨论】:

    标签: jenkins jenkins-plugins


    【解决方案1】:

    我刚刚了解到,通过嵌套node 子句,可以在pipeline 作业中很好地同时分配多个从属:

    node('label1') {
        node('label2') {
            // your code here
            [...]
        }
    }
    

    请参阅 this question,其中 Mateusz 提出了针对类似问题的解决方案。

    【讨论】:

      【解决方案2】:

      让我看看我是否理解了这个问题。

      1. 您希望动态选择一个从属设备并在其上启动应用服务器。

      2. 当应用服务器在从属服务器上运行时,您不希望它运行任何其他作业。

      3. 但当应用服务器未运行时,您想将该从站用作任何其他从站来执行其他作业。

      一种出路是给奴隶贴上标签。并使用“Restrict where this project can be run”使App Server和Test Suite运行在带有Slave标签的机器上。

      然后在从节点中,将“# of executors”设置为 1。这将确保在任何时候都只有一个 Job 将运行。

      下一步将创建一个作业来启动应用服务器,然后在应用服务器启动作业成功后启动测试作业。..

      如果您的测试作业需要知道运行您的应用服务器的机器的服务器详细信息,那么它就会变得有趣。

      【讨论】:

      • 这几乎就是我们最终要做的。我们需要向下游作业传递一堆配置信息。完全不清楚如何做到这一点。我最终使用的是由应用服务器作业编写的属性文件。这很好用,而且写起来很简单,但弄清楚这一点并不明显。
      猜你喜欢
      • 2015-07-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-11-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多