任意变量
Task 一直支持变量,但即使您可以使用不同的 YAML 类型定义它们,它们也会被 Task 转换为字符串。这限制了用户只能进行字符串操作,并鼓励了对简单问题的混乱变通。从 v3.37.0 开始,这不再是问题!Task 现在支持大多数变量类型,包括 布尔值、整数、浮点数 和 数组!
这有什么重要性?
这些变化让您能够以更自然的方式使用变量,并开启了许多之前无用的 sprig 函数。查看下面的示例以获取一些灵感。
评估布尔值
不再需要将字符串与 "true" 或 "false" 进行比较。现在您可以在模板中使用实际的布尔值:
version: 3
tasks:
foo:
vars:
BOOL: true # <-- Parsed as a string even though its a YAML boolean
cmds:
- '{{if eq .BOOL "true"}}echo foo{{end}}'version: 3
tasks:
foo:
vars:
BOOL: true # <-- Parsed as a boolean
cmds:
- '{{if .BOOL}}echo foo{{end}}' # <-- No need to compare to "true"算术运算
您现在可以在整数和浮点数变量上执行基本的算术运算:
version: 3
tasks:
foo:
vars:
INT: 10
FLOAT: 3.14159
cmds:
- 'echo {{add .INT .FLOAT}}'您可以使用以下任何算术函数:add、sub、mul、div、mod、max、min、floor、ceil、round 和 randInt。请查看 slim-sprig 数学文档 以获取更多信息。
数组
您现在可以在模板中遍历数组,并使用基于列表的函数:
version: 3
tasks:
foo:
vars:
ARRAY: [1, 2, 3]
cmds:
- 'echo {{range .ARRAY}}{{.}}{{end}}'您可以使用以下任何基于列表的函数:first、rest、last、initial、append、prepend、concat、reverse、uniq、without、has、compact、slice 和 chunk。请查看 slim-sprig 列表文档 以获取更多信息。
使用 for 遍历变量
以前,您必须使用分隔符分隔的字符串来遍历变量中的任意项目列表,并使用 split 子键指定分隔符来拆分它们。然而,我们现在添加了对使用 for 关键字遍历“集合类型”变量的支持,因此您现在可以直接遍历列表变量:
version: 3
tasks:
foo:
vars:
LIST: 'foo,bar,baz'
cmds:
- for:
var: LIST
split: ','
cmd: echo {{.ITEM}}version: 3
tasks:
foo:
vars:
LIST: ['foo', 'bar', 'baz']
cmds:
- for:
var: LIST
cmd: echo {{.ITEM}}地图呢?
地图最初包含在 Any Variables 实验中。然而,它们还没有完全准备好。与其让您等待所有内容同时准备好,我们已经发布了所有其他变量类型支持,并将在新的 "[Map Variables][map-variables]" 实验中继续开发地图支持。
我们正在寻求对几种不同提案的反馈,因此请尝试一下并告诉我们您的想法。🙏
