# Switch

Switch是一个条件判断节点，依据[全局变量](../parameter/global.md)的值和用户所编写的表达式判断结果执行对应分支。

## 创建任务

拖动工具栏中的<img src="/img/switch.png" width="20"/>任务节点到画板中即能完成任务创建，**注意**switch任务创建后，要先配置上下游，才能配置任务分支的参数

## 任务参数

- 节点名称：一个工作流定义中的节点名称是唯一的。
- 运行标志：标识这个节点是否能正常调度,如果不需要执行，可以打开禁止执行开关。
- 描述信息：描述该节点的功能。
- 任务优先级：worker线程数不足时，根据优先级从高到低依次执行，优先级一样时根据先进先出原则执行。
- Worker分组：任务分配给worker组的机器机执行，选择Default，会随机选择一台worker机执行。
- 失败重试次数：任务失败重新提交的次数，支持下拉和手填。
- 失败重试间隔：任务失败重新提交任务的时间间隔，支持下拉和手填。
- 超时告警：勾选超时告警、超时失败，当任务超过"超时时长"后，会发送告警邮件并且任务执行失败.
- 条件：可以为switch任务配置多个条件，当条件满足时，就会执行指定的分支，可以配置多个不同的条件来满足不同的业务
- 分支流转：默认的流转内容，当**条件**中的内容为全部不符合要求时，则运行**分支流转**中指定的分支

## 详细流程

假设我们三个任务，其依赖关系是 `A -> B -> [C, D]` 其中task_a是shell任务，task_b是switch任务

- 任务A中通过[全局变量](../parameter/global.md)定义了名为`id`的全局变量，声明方式为`${setValue(id=1)}`
- 任务B增加条件，使用上游声明的全局变量实现条件判断（注意：只要直接、非直接上游在switch运行前对全局变量赋值，switch运行时就可以获取该全局变量）。下面我们想要实现当id为1时，运行任务C，其他运行任务D
  - 配置当全局变量`id=1`时，运行任务C。则在任务B的条件中编辑`${id} == 1`，分支流转选择`C`
  - 对于其他任务，在分支流转中选择`D`

最终switch任务的配置如下

![task-switch-configure](/img/switch_configure.jpg)

## 相关任务

[condition](conditions.md)：[Condition](conditions.md)节点主要依据上游节点的执行状态（成功、失败）执行对应分支。Switch节点主要依据全局变量的值和用户所编写的表达式判断结果执行对应分支
