评测任务
控制执行

控制执行

顺序任务能够按一定的顺序执行它的子任务,通过 steps 定义。默认情况下,顺序任务会按照子任务的前后顺序先后执行每个子任务,当某个子任务执行失败进入 FAILED 态时,顺序任务停止执行,并将剩余的子节点的状态设置为 SKIPPED 态。为了让用户能够建模一些更复杂的任务执行流程,Seele 提供了两种属性改变上述的行为,它们分别是:whenneeds

when 配置

接收一个字符串,可选值:trueprevious.ok。默认值为 previous.ok

当顺序任务中的某个子任务执行失败时,Seele 会检查它的后继节点的 when 值。默认情况下,previous.ok 表示仅在前驱节点执行成功时继续运行本节点。设置为 true 可以让 Seele 即使在前驱节点执行失败时依然执行本节点。

如果你对这个属性有更好的建议,欢迎在本项目的 GitHub 仓库 (opens in a new tab)中发表 issue。

needs 配置

接收一个字符串,指定在顺序任务中它作为子任务的前驱任务的名称。

默认情况下,顺序会按照声明顺序先后执行子任务。每个子任务的前驱节点就是它相邻的前一个任务。 例如下面的例子中,onetwothree 三个子任务会被按顺序执行。它们的关系如下图所示。

steps:
  one: # ...
  two: # ...
  three: # ...

Order of the three tasks

通过在 three 的配置中添加 when: one,我们将 three 的前驱节点从 two 改变为 one。此时,顺序任务的执行顺序发生了变化,它仍然会先执行 one,但之后会并发执行 twothree。此时它们的关系如下图所示。

Order of the three tasks when using needs

当搭配 when 使用时,previous.ok 指向它的前驱任务的状态,也就是 when 指定的前驱任务。when 只能指定声明在它之前的任务名称,例如在上面的例子中我们不能two 中使用 when: three