我开始在我的项目中使用Jenkins,我正在尝试并行化我在Jenkins的4个文件中编写的测试套件(Rspec测试用例)
spec/features/
|-- test1.rb
|-- test2.rb
|-- test3.rb
|-- test4.rb
我们可以使用以下命令运行所有测试用例,它将按顺序运行test1.rb ..test4.rb中编写的所有测试,大约需要1小时。
script spec/features/
如果要从每个测试文件中执行测试用例,我们可以像
一样运行script spec/features/test1.rb
现在我想将这些测试用例并行化,这可以将运行时间从1小时减少到15分钟,所有这些测试用例可以并行运行在一台机器上
我在Jenkins中采用了以下方法
1)设置新作业“Main_Test_job”
2)
Selected "Trigger/Call builds on other projects"
projects to build " Child_test_job"
Build on same node
Predefined Parameters TEST_UNIT=test1.rb
Block until the triggered projects finish their builds ( Not selected this)
添加触发器--->
Selected "Trigger/Call builds on other projects"
projects to build " Child_test_job"
Build on same node
Predefined Parameters TEST_UNIT=test2.rb
Block until the triggered projects finish their builds ( Not selected this)
添加触发器--->
Selected "Trigger/Call builds on other projects"
projects to build " Child_test_job"
Build on same node
Predefined Parameters TEST_UNIT=test3.rb
Block until the triggered projects finish their builds ( Not selected this)
添加触发器--->
Selected "Trigger/Call builds on other projects"
projects to build " Child_test_job"
Build on same node
Predefined Parameters TEST_UNIT=test4.rb
Block until the triggered projects finish their builds ( Not selected this)
3)
Created job "Child_test_job" as which was included in main_test_job like below
Select Build step "Execute Shell" with below command
script spec/$TEST_UNIT
当我启动“Main_Test_job”时,它将自动在同一台机器上启动4个Child_Test_Jobs,这样可以将总运行时间减少到15分钟。
但在这种情况下,“Main_test_job”无法监控4的状态 child_test_jobs,开始4后总是立即成功 儿童工作
“阻止直到触发的项目完成构建”此选项 监视子作业,但如果我们为所有子作业选择此选项, 它们按顺序运行而不是并行运行。
我无法使用加入插件,因为我没有运行不同的作业而是多次触发相同的作业。
我的想法:
为每个test.rb分别创建作业,并使用join trigger进行监视 所有工作的状态
有一些shell脚本作为“Main_Test_job”的后期构建任务 这将汇总/监控每个工作的状态/结果。
我认为这在许多组织中都是常见的情况,并且Jenkins必须有一个简单的方法来实现这一目标。 请让我知道您的方法/想法。可能是我在这里遗漏了一些东西。
答案 0 :(得分:1)
如果您的作业可以在同一台计算机上并行运行,那么您可能会对Multijob插件感兴趣。它并行启动工作,但等到所有工作完成。
答案 1 :(得分:0)
您也可以使用Build Flow Plugin
您可以使用此插件运行任何类型的作业。