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

如何与詹金斯并行执行同一作业多次?

段干博涉
2023-03-14
问题内容

我正在测试詹金斯,看它是否适合我们的构建和测试框架。我发现Jenkins及其可用的插件可以满足我们的大多数需求。除了我似乎无法找到有关如何执行一种特定类型任务的帮助。

我们正在为嵌入式设备创建应用程序。我们需要在这些设备上运行100项测试。如果我们在构建后在一台设备上运行所有测试,那么将需要几个小时才能获得结果。但是,如果我们在100个设备上并行运行测试,则可以在更短的时间内获得结果。

所有测试都将具有非常相似的起点。使用设备的IP地址调用测试脚本以运行测试,并使用用户名/
pw。该脚本将在设备上进行必要的测试,并报告每个测试项目的通过/失败结果。

我认为这样做的漫长/痛苦的方式是在Jenkins中编写100个作业,每个作业将直接是不同的测试脚本(具有上述参数),并使用可用的插件并行运行这些作业。但是,从长远来看,维持所有这些工作将非常困难。

因此,执行此操作的更好方法是创建一个Job(可以将其称为child_tester),该Job可以采用以下参数:测试脚本名称,设备的IP地址,用户名/密码等。然后使用另一个Job(让我们调用)
(使用mother_tester)来使用不同的IP地址调用child_tester作业100次,然后并行运行它们。我需要某种方式来累积child_tester作业的每个单独运行的所有测试结果,并将其报告给mother_tester。

我的问题是在Jenkins中是否有插件或完成此任务的任何方式?我研究了名为“ Build Flow”,“ Parallel Test Executor”和“
Parameterized Trigger”的插件的信息。但是,它们似乎不符合我的需求。


问题答案:

我了解您已经研究了Build Flow插件,但是不确定您为什么不使用它。也许您可以指出我的建议中的漏洞。

假设系统中有足够的执行程序来并行运行作业,我认为Build Flow插件和Build Flow Test
Aggregator插件可以满足
您的要求。

  • Build Flow插件支持并行运行作业。我看不出Build Flow无法安排您的“子”作业与不同参数并行运行的任何原因。

  • Build Flow Test Aggregator从Build Flow作业的预定版本中获取测试结果,因此您的“子”作业将需要发布自己的测试结果。

  • 您将需要配置“子”作业,以便可以通过在作业配置中选中“如有必要,执行并发构建”来并行运行。

  • 无论提供与嵌入式设备的连接的任何一组从站,都将需要足够的执行程序来并行运行您的作业。

更新 :具有简单的构建流程定义:

parallel (
  { build("dbacher flow child", VALUE: 1) },
  { build("dbacher flow child", VALUE: 2) },
  { build("dbacher flow child", VALUE: 3) },
  { build("dbacher flow child", VALUE: 4) }
)

我得到的输出:

parallel {
    Schedule job dbacher flow child
    Schedule job dbacher flow child
    Schedule job dbacher flow child
    Schedule job dbacher flow child
    Build dbacher flow child #5 started
    Build dbacher flow child #6 started
    Build dbacher flow child #7 started
    Build dbacher flow child #8 started
    dbacher flow child #6 completed 
    dbacher flow child #7 completed 
    dbacher flow child #5 completed 
    dbacher flow child #8 completed 
}

作业历史记录显示所有四个作业都在几秒钟之内安排好。但是作业构建步骤包含人为延迟(睡眠),这将阻止任何单个构建快速完成该工作。

更新2 :这是一个从另一个html" target="_blank">数据结构动态生成并行任务列表的示例:

// create a closure for the deploy job for each server 
def paramValues = (1..4)
def testJobs = [] 
for (param in paramValues) { 
  def jobParams = [VALUE: param] 
  def testJob = { 
    // call build 
    build(jobParams, "dbacher flow child") 
  } 
  println jobParams
  testJobs.add(testJob) 
}

parallel(testJobs)

传递给并行的列表是闭包的列表,这些闭包使用唯一的参数调用构建。我必须确保在闭包函数之外定义作业参数,以确保分别安排作业。



 类似资料:
  • 问题内容: 我有一些正在使用Jenkins运行的自动化测试。 我已经将Jenkins连接到我的GitSwarm,它从我的分支中提取代码, 然后将其执行。 我已经为Jenkins安装了“并行测试作业执行插件”。 在插件中,我指定了要分三批运行的测试 屏幕截图 还有什么我应该指定的吗?我认为我不必这样做,因为 我已经连接到GitSwarm来运行代码。控制台输出似乎 另有说明! 在工作空间C:\ Jen

  • 问题内容: 我安装了Jenkins,用于运行在Java,Maven,JMeter等上运行的自动化测试。Builds不会生成部署文件和文件夹,而只会生成测试报告。我是否可以一个接一个地(几乎同时)建立多个作业以并行运行?他们不必完全在同一时间。我只想确保开始第二个构建不会停止/损坏第一个(已运行)构建。谢谢 问题答案: 是的,有可能。 转到您的工作->配置并检查: 如有必要,执行并发构建 文件: 如

  • 问题内容: 这是我要执行的Jenkins管道。我正在关注本教程: 但是作业失败,并显示以下消息。 有人可以帮我解决为什么失败了。 问题答案: 您需要在阶段声明之后添加一个step块。

  • 问题内容: 我在詹金斯(Jenkins)有一个提交构建项目,该项目计划在完成时安排一个接受构建项目。由于提交的速度快于接受构建作业的完成时间,因此不久之后,现在有 六个 排队的接受构建作业。我希望验收构建项目像“投票SCM”功能一样工作- 完成后,开始最近排队的作业 ,跳过其余的 作业 。 没有更多的技巧,我无法使用“在构建其他项目之后构建”,因为我需要将信息从提交构建作业传递到验收构建作业。 问

  • 问题内容: 早上好。 我想将Jenkins服务器配置为使用插件 Jenkins NUnit插件 运行NUnit,但是我尝试了很多事情,但是没有用。 我单击按钮添加构建步骤 >> 执行Windows批处理命令, 但是我在这里看到然后我正在配置此表单: “ c:\ program files \ nunit \ bin \ nunit-console.exe” $(项目本地)\ $(DLLTest).

  • 我已经尝试将Shell可执行文件设置为C:\windows\system32\cmd.exe和C:\cygwin64\bin\sh.exe,但是我遇到了同样的错误。我怎样才能解决这个问题?