基因容器 GCS
基因容器 GCS
- 最新动态
- 产品介绍
- 快速入门
- 用户指南
- Cromwell引擎使用指南
- 最佳实践
- 流程语法参考
- Python SDK参考
- API参考
-
CLI参考
- 命令总览
- 安装命令行工具
- 示例:使用命令行执行简单脚本
-
gcs 命令详情
- gcs version
- gcs config add
- gcs config list
- gcs get kubectl
- gcs get enviroment
- gcs set env
- gcs get sfs
- gcs set sfs
- gcs get obscli
- gcs obs upload
- gcs get workflow
- gcs create workflow
- gcs del workflow
- gcs update workflow
- gcs sub workflow
- gcs get execution
- gcs create execution
- gcs del execution
- gcs set execution
- gcs sub job
- gcs sub repjob
- gcs get tool
- gcs sub wdl
- gcs get wdl
- gcs set wdl
- get get fr
- config.ini配置说明
- 常见问题
- 视频帮助
- 文档下载
- 通用参考
链接复制成功!
条件分支
GCS支持条件分支功能,基础原理是 根据每个步骤的condition字段来判断当前步骤是否执行。根据业务使用场景分为简单条件分支和复杂条件分支。
- 简单条件分支,即在流程执行前,已经确定某个值是true还是false,从而可以确定对应的步骤是否需要执行。一般情况下,简单条件分支适用于condition字段,后跟布尔类型的值,做为判断。
- 复杂条件分支,即在流程执行过程中,根据流程执行的结果才能判断对应的步骤是否需要执行。一般情况下,复杂条件分支可以使用check_result函数来判断执行结果,并配合condition字段确定对应的步骤是否需要执行。
简单条件分支示例
所谓简单,就是在执行流程时,提前可以决定哪些步骤要不要执行,和软件中的if/else语法类似。例如完整流程为 A->B,运行流程时,输入给B步骤的condition条件为false,那么B步骤不需要执行。
如下示例中,如果job-a的condition值为false,则commands命令不会执行。
inputs: bool-var: default: true description: 布尔值输入变量 type: bool workflow: job-a: tool: nginx:latest condition: ${bool-var} # <==通过变量,决定步骤是否执行。相当于 if(bool-var) commands: - echo run-job-a
复杂条件分支示例
所谓复杂,就是流程运行过程中,基于运行结果才决定下一步骤要不要执行,和软件中if/else或是switch/case语法类似。例如: A步骤检测样本是否合格,如果合格则执行B步骤;如果不合格则执行C步骤。
因为需要根据上一个步骤的“执行结果”来判断下一步骤的condition值是true还是false,所以GCS使用了check_result函数来动态判断。
图1 复杂条件分支示例

如下示例中,job-a的结果为pass,则job-b将会执行,job-c和job-d不会执行。
workflow: job-a: tool: nginx:latest commands: - echo pass # <== 执行结果以标准std_out体现 job-b: tool: nginx:latest condition: check_result(job-a, "pass") # <==判断job-a的结果,等于pass才执行。 commands: - echo run-job-b job-c: tool: nginx:latest condition: check_result(job-a, "npass") # <==判断job-a的结果,等于npass才执行。 commands: - echo run-job-c job-d: tool: nginx:latest condition: check_result(job-a, "failed") # <==判断job-a的结果,等于failed才执行。 commands: - echo run-job-d
check_result的第二个参数可以使用 inputs变量,详细请参见check_result函数。示例如下:
condition: check_result(job-a, ${my_var})
依赖传递
如果流程为 A->B->C,当步骤B由于条件不满足而不需要执行时,由于依赖原因,那么步骤C不管condition是否为true也不需要执行。
即:
A -> B (condition为false时) -> C (自动不需要执行)
所以不需要为每个Job重复写condition条件,GCS自动会判断依赖传递。
父主题: 流程语法说明