相关概念
Job是Action工作流的基本组成单位,通过定义多个job,并且设置job的依赖关系,可以生成一个,TensorBay Workflow Engine通过执行这个DAG来实现任务的自动化。通过以下YAML文件为例:
tasks:
hello-world:
container:
image: alpine:latest
command: [echo]
args: ["hello world!"]
【tasks】: 定义该workflow下所有的job
【tasks.hello-world】: 定义了一个task,task的名字叫做"hello-world"
【tasks.hello-world.container】: 这个job执行环境是docker container
【tasks.hello-world.container.image】: docker container使用的image是alpine:latest
【tasks.hello-world.container.command】: docker container里执行的命令是echo
【tasks.hello-world.container.args】: echo的参数是"hello world"
1 Job的运行环境
job支持以下3种运行环境,每个job有且仅有一个运行环境:
1.Container:在docker container里执行任意命令,使用指定的image,生成一个container并执行,任务内容由image定义。
tasks:
hello-world:
container:
image: alpine:latest
command: [echo]
args: ["hello world!"]
env:
- name: GAS-URL
value: https://gas.graviti.cn
2.Script:在docker container里执行指定的脚本
tasks:
hello-script-task:
script:
image: python:alpine3.8
command: [python]
source: |
import logging
import os
import sys
import time
logging.basicConfig(level=logging.INFO)
logging.info('environment was:')
for key, value in os.environ.items():
logging.info(f'\t{key} = {value}')
args = sys.argv
count = 20
if len(args) > 1:
count = int(args[1])
logging.info(f'count was {count}')
idx = 0
while idx < count:
logging.info(f'loop at index {idx}.')
idx += 1
time.sleep(1)
logging.info('complete')
3.Git:在docker container内执行一个git repo的代码
tasks:
hello:
git:
image: python:3.9.5-buster
command: ["python3"]
args: ["main.py"]
repo: https://github.com/username/repository.git@reversion
2 Job的依赖关系
Dependencies:job可以通过dependencies关键字来定义他们的依赖关系
tasks:
taskA:
container:
image: johngraviti/count_down:v0.1
command: [python]
args: [/root/main.py, 40]
taskB:
dependencies:
- taskA
container:
image: johngraviti/count_down:v0.1
command: [python]
args: [/root/main.py, 60]
taskC:
dependencies:
- taskA
container:
image: johngraviti/count_down:v0.1
command: [python]
args: [/root/main.py, 120]
taskD:
dependencies:
- taskB
- taskC
container:
image: johngraviti/count_down:v0.1
command: [python]
args: [/root/main.py, 70]
执行效果:菱形DAG图,taskA先执行,然后taskB和taskC并发执行,taskD等到taskB和taskC都结束才开始运行
3 Job的参数设置
3-1 参数的属性
Name: 参数名称,用来在workflow代码中引用该参数
Type: 参数类型,指定该参数的数据类型,支持三种简单类型
Default: 参数的默认值,启动workflow时,如果没有显式指定,则会取这里预定义的默认值
3-2 参数的定义
支持通过TensorBay控制台设置及查看详细参数
3-3 参数的设定
手动式:如果workflow启动方式为手动式,那么value可以通过TensorBay控制台动态设置
自动式:如果workflow启动方式为自动式,那么value取默认值
3-4 参数的引用方式
在workflow中通过参数name使用参数
tasks:
hello-world:
container:
image: alpine:latest
command: [echo]
args: ["{{workflow.parameters.foo}}" "{{workflow.parameters.bar}}"]
参数的前缀必须是workflow.parameters.
4 Job的环境设置
Environment定义了container的环境变量,环境变量的引用方式跟普通的docker container环境变量一致