1

我想做的事

好吧,如果它是一个 bash 脚本,它会是这样的:

# run "foo" test
prepare_test_machine --profile=foo
run_test
# run "bar" test
prepare_test_machine --profile=bar
run_test
# run "baz" test
prepare_test_machine --profile=baz
run_test

我不需要并行化,因为所有测试实际上都在同一个盒子上运行。

我试过什么

我创建了两个作业,一个用于prepare_test_machine,一个用于run_testprepare_test_machine只接受一个参数,而run_test不接受任何参数——它可以简单地假设前面的作业已经设置好所有参数。

接下来我设置了一个 MultiJob,它将每个步骤称为 MultiJob 阶段,仅在必要时传递参数。

怎么了?

虽然它似乎确实完成了我需要的工作,但它的行为方式完全令人困惑:在我启动 MultiJob 之后:

  1. 所有准备工作都“眨眼”,

  2. 完成后,所有人都会在 MJ 视图中报告相同的结果和持续时间,

  3. 然后所有运行的作业都会“闪烁”,

  4. 并且行为与准备工作相同,

  5. 对于每一对重复,每次运行的结果被写入所有类似的运行,而不仅仅是 MJ 视图中的单个阶段。

例如,如果“baz”分别需要 97s 和 8s,“bar”需要 87s 和 11s,而“baz”需要 111s 和 25s,我希望看到类似这样的内容(“#”标记阶段标签):

+-----------------------------------+
| # prepare foo                     |
| O   prepare_test_machine     97s  |
| # run foo                         |
| O   run_test                 8s   |
| # prepare bar                     |
| O   prepare_test_machine     87s  |
| # run bar                         |
| O   run_test                 11s  |
| # prepare baz                     |
| O   prepare_test_machine     111s |
| # run baz                         |
| O   run_test                 25s  |
+-----------------------------------+

而是看到:

+-----------------------------------+
| # prepare foo                     |
| O   prepare_test_machine     111s |
| # run foo                         |
| O   run_test                 25s  |
| # prepare bar                     |
| O   prepare_test_machine     111s |
| # run bar                         |
| O   run_test                 25s  |
| # prepare baz                     |
| O   prepare_test_machine     111s |
| # run baz                         |
| O   run_test                 25s  |
+-----------------------------------+

问题

可以调整此设置以使其按我想要的方式运行吗?或者我只是使用了错误的工具来完成这项工作?(我是 Jenkins 的新手,所以我不会感到惊讶)。如果是这样,有人能指出我正确的方向吗?

(如果可能的话,我想保持布局平坦,即避免混乱的子项目或“运行后”触发器。)

4

1 回答 1

1

此问题已记录在案(当同一作业并行执行时未观察到 Future obj)并且我提供了错误修复,不幸的是该修复不是最新版本的一部分。

于 2013-10-22T11:48:22.310 回答