参数传递
更新时间:2024-08-16
参数传递
一个执行在运行的过程中,会有三种参数的来源,如下所示:
参数来源 | 说明 |
---|---|
全局输入参数 | 在创建模板时,你可以为模板添加全局输入参数 在创建模板执行时,你需要为模板的全局参数赋值,这些参数值构成了执行的全局输入参数 |
任务输入参数 | 不同的任务类型,有不同的输入参数,在创建模板时,你需要为每个任务的输入参数赋值。 在赋值时,你可以填写常量,也可以使用内置函数来引用全局参数或上游任务的输出参数。这些参数构成了任务的输入参数 |
任务输出参数 | 每个任务在运行后,会产生输出参数,输出参数可以作为后续任务的输入参数被引用 |
这些参数会对所有在运行中的任务可见。当发生参数同名的情况时,这些参数会互相覆盖,了解这些参数的优先级和覆盖规则,对正确运行模板就尤为重要。当然,你也可以利用这一覆盖规则,在执行过程中,动态的修改下游任务可见的参数值。
参数覆盖规则
参数覆盖规则如下:
当前任务输入参数 > 上游任务输出参数 > 全局输入参数
这一参数覆盖规则,和一般编程语言中的变量覆盖规则是一致的,容易理解且符合直觉。
以下是一个示例:
{
// 全局参数
"properties": {
"arg": "v1",
},
"operators": [
{
"name": "我的任务_1",
// 任务输入参数
"properties": {
"arg": "v2", // 与全局参数同名,会覆盖全局参数
}
},
{
"name": "我的任务_2",
// 任务输入参数
"properties": {
// 使用函数引用参数'arg'
// 若上游任务'我的任务_1'输出参数包含arg=v3,将覆盖全局参数,读取到arg=v3
"local": {"Ref": "arg"},
}
},
]
}
- 全局参数设置了
arg=v1
我的任务_1
执行时,任务的输入参数将覆盖全局参数,读取到arg=v2
- 假设,
我的任务_1
执行成功后,输出arg=v3
我的任务_2
执行时,通过函数引用参数arg
,此时,上游任务的输出参数优先级高于全局参数,因此读取到arg=v3