# 工作流定义

## <span id=creatDag>创建工作流定义</span>

- 点击项目管理->工作流->工作流定义，进入工作流定义页面，点击“创建工作流”按钮，进入**工作流DAG编辑**页面，如下图所示：
    <p align="center">
        <img src="/img/dag0.png" width="80%" />
    </p>  
- 工具栏中拖拽 <img src="/img/tasks/icons/shell.png" width="15"/> 到画板中，新增一个Shell任务,如下图所示：
  ![demo-shell-simple](/img/tasks/demo/shell.jpg)
- **添加shell任务的参数设置：**
  1. 填写“节点名称”，“描述”，“脚本”字段；
  1. “运行标志”勾选“正常”，若勾选“禁止执行”，运行工作流不会执行该任务；
  1. 选择“任务优先级”：当worker线程数不足时，级别高的任务在执行队列中会优先执行，相同优先级的任务按照先进先出的顺序执行；
  1. 超时告警（非必选）：勾选超时告警、超时失败，填写“超时时长”，当任务执行时间超过**超时时长**，会发送告警邮件并且任务超时失败；
  1. 资源（非必选）。资源文件是资源中心->文件管理页面创建或上传的文件，如文件名为`test.sh`，脚本中调用资源命令为`sh test.sh`；
  1. 自定义参数（非必填）；
  1. 点击"确认添加"按钮，保存任务设置。

- **配置任务之间的依赖关系：** 点击右上角图标<img src="/img/line.png" width="35"/>连接任务；如下图所示，任务2和任务3并行执行，当任务1执行完，任务2、3会同时执行。

    <p align="center">
       <img src="/img/dag2.png" width="80%" />
    </p>

- **删除依赖关系：** 点击右上角"箭头"图标<img src="/img/arrow.png" width="35"/>，选中连接线，点击右上角"删除"图标<img src="/img/delete.png" width="35"/>，删除任务间的依赖关系。
    <p align="center">
       <img src="/img/dag3.png" width="80%" />
    </p>

- **保存工作流定义：** 点击”保存“按钮，弹出"设置DAG图名称"弹框，如下图所示，输入工作流定义名称，工作流定义描述，设置全局参数（选填，参考[全局参数](../parameter/global.md)），点击"添加"按钮，工作流定义创建成功。
    <p align="center">
       <img src="/img/dag4.png" width="80%" />
     </p>
  > 其他类型任务，请参考 [任务节点类型和参数设置](#TaskParamers)。 <!-- markdown-link-check-disable-line -->

## 工作流定义操作功能

点击项目管理->工作流->工作流定义，进入工作流定义页面，如下图所示:
      <p align="center">
          <img src="/img/work_list.png" width="80%" />
      </p>
工作流定义列表的操作功能如下：

- **编辑：** 只能编辑"下线"的工作流定义。工作流DAG编辑同创建工作流定义。
- **上线：** 工作流状态为"下线"时，上线工作流，只有"上线"状态的工作流能运行，但不能编辑。
- **下线：** 工作流状态为"上线"时，下线工作流，下线状态的工作流可以编辑，但不能运行。
- **运行：** 只有上线的工作流能运行。运行操作步骤见运行工作流
- **定时：** 只有上线的工作流能设置定时，系统自动定时调度工作流运行。创建定时后的状态为"下线"，需在定时管理页面上线定时才生效。定时操作步骤见工作流定时
- **定时管理：** 定时管理页面可编辑、上线/下线、删除定时。
- **删除：** 删除工作流定义。
- **下载：** 下载工作流定义到本地。
- **树形图：** 以树形结构展示任务节点的类型及任务状态，如下图所示：
    <p align="center">
        <img src="/img/tree.png" width="80%" />
    </p>  

## 运行工作流

- 点击项目管理->工作流->工作流定义，进入工作流定义页面，如下图所示，点击"上线"按钮<img src="/img/online.png" width="35"/>，上线工作流。
    <p align="center">
        <img src="/img/work_list.png" width="80%" />
    </p>

- 点击”运行“按钮，弹出启动参数设置弹框，如下图所示，设置启动参数，点击弹框中的"运行"按钮，工作流开始运行，工作流实例页面生成一条工作流实例。
     <p align="center">
       <img src="/img/run-work.png" width="80%" />
     </p>  
  工作流运行参数说明： 
       
  * 失败策略：当某一个任务节点执行失败时，其他并行的任务节点需要执行的策略。”继续“表示：某一任务失败后，其他任务节点正常执行；”结束“表示：终止所有正在执行的任务，并终止整个流程。
  * 通知策略：当流程结束，根据流程状态发送流程执行信息通知邮件，包含任何状态都不发，成功发，失败发，成功或失败都发。
  * 流程优先级：流程运行的优先级，分五个等级：最高（HIGHEST），高(HIGH),中（MEDIUM）,低（LOW），最低（LOWEST）。当master线程数不足时，级别高的流程在执行队列中会优先执行，相同优先级的流程按照先进先出的顺序执行。
  * worker分组：该流程只能在指定的worker机器组里执行。默认是Default，可以在任一worker上执行。
  * 通知组：选择通知策略||超时报警||发生容错时，会发送流程信息或邮件到通知组里的所有成员。
  * 收件人：选择通知策略||超时报警||发生容错时，会发送流程信息或告警邮件到收件人列表。
  * 抄送人：选择通知策略||超时报警||发生容错时，会抄送流程信息或告警邮件到抄送人列表。
  * 启动参数: 在启动新的流程实例时，设置或覆盖全局参数的值。
  * 补数：包括串行补数、并行补数2种模式。串行补数：指定时间范围内，从开始日期至结束日期依次执行补数，依次生成N条流程实例；并行补数：指定时间范围内，多天同时进行补数，同时生成N条流程实例。 
    * 补数： 执行指定日期的工作流定义，可以选择补数时间范围（目前只支持针对连续的天进行补数)，比如需要补5月1号到5月10号的数据，如下图所示： 
        <p align="center">
            <img src="/img/complement.png" width="80%" />
        </p>

    > 串行模式：补数从5月1号到5月10号依次执行，依次在流程实例页面生成十条流程实例；

    > 并行模式：同时执行5月1号到5月10号的任务，同时在流程实例页面生成十条流程实例。

## <span id=creatTiming>工作流定时</span>

- 创建定时：点击项目管理->工作流->工作流定义，进入工作流定义页面，上线工作流，点击"定时"按钮<img src="/img/timing.png" width="35"/>,弹出定时参数设置弹框，如下图所示：
    <p align="center">
        <img src="/img/time-schedule.png" width="80%" />
    </p>
- 选择起止时间。在起止时间范围内，定时运行工作流；不在起止时间范围内，不再产生定时工作流实例。
- 添加一个每天凌晨5点执行一次的定时，如下图所示：
    <p align="center">
        <img src="/img/time-schedule2.png" width="80%" />
    </p>
- 失败策略、通知策略、流程优先级、Worker分组、通知组、收件人、抄送人同工作流运行参数。
- 点击"创建"按钮，创建定时成功，此时定时状态为"**下线**"，定时需**上线**才生效。
- 定时上线：点击"定时管理"按钮<img src="/img/timeManagement.png" width="35"/>，进入定时管理页面，点击"上线"按钮，定时状态变为"上线"，如下图所示，工作流定时生效。
    <p align="center">
        <img src="/img/time-schedule3.png" width="80%" />
    </p>

## 导入工作流

点击项目管理->工作流->工作流定义，进入工作流定义页面，点击"导入工作流"按钮，导入本地工作流文件，工作流定义列表显示导入的工作流，状态为下线。