在上一篇我們學到了如何用YAML表達陣列、物件,但是其實表達物件型別的style分為兩種
在這篇會說明另一種,以及兩種的差異
block style
是YAML的一種常見
的定義資料格式的方式
上一篇中的例子、一般來說在workflow中使用就是block style
當以這種風格撰寫時,物件、陣列長得有點像Markdown的列表。特點是元素會以換行、縮排隔開
這種style的優點是更加地彈性
、好閱讀、好維護
flow style也是YAML的一種的定義資料格式的方式
以flow style撰寫的物件、陣列長得和JSON很像
。其特點是會使用[]和{}
,並把所有的元素用,隔開
在資料結構單純
的情況下可讀性
甚至比block style高
# block-style
apple:
color: red
size: middle
price: 20
# flow-style
apple: {color: red, size: middle, price: 20}
# 相當於
# {
# "apple": {
# "color": "red",
# "size": "middle",
# "price": 20
# }
# }
# block-style
fruits:
- apple
- banana
- watermelon
# flow-style
fruits: [apple, banana, watermelon]
# 相當於
# {
# "fruits": [
# "apple",
# "banana",
# "watermelon",
# ]
# }
# block-style
fruits:
-
name: apple
color: red
price: 20
-
name: banana
color: yellow
price: 15
# flow-style
fruits: [{name: apple, color: red, price: 20}, {name: banana, color: yellow, price: 15}]
# 相當於
{
"fruits":[
{
"name": "apple",
"color": "red",
"price": 20
},
{
"name": "banana",
"color": "yellow",
"price": 15
}
]
}
第一次接觸YAML的人可能會不太習慣、覺得JSON比較好,並對於為何各大DevOps工具皆採用YAML而不是JSON感到疑惑
這邊舉一些在workflow的片段為例子,來看一下究竟YAML有什麼優點
當資料結構複雜時,由於YAML不用{}和,
,因此會比JSON更簡潔、更易讀
尤其是在workflow中使用變數、placeholder時特別明顯
run: echo "${{ env.Greeting }}!"
YAML支援的多行字串、錨點,但JSON則否
尤其是多行字串在想要在某個step內run多個shell command時相當實用
run: |
echo "I heard that you adopted a puppy last week."
echo "How's it going with your new puppy?"
DevOps工具的config通常會比一般的資料來的複雜,所以為了幫助後人了解整個workflow的內容,註解就會變得很重要
on:
schedule:
# 每個月的每天,如果是週一、週三,那就在 1:30 (UTC+0) 時執行
- cron: '30 1 * * 1,3'