iT邦幫忙

2024 iThome 鐵人賽

DAY 4
3
DevOps

菜逼八用Github Actions系列 第 4

Day 04 - block-style & flow-style的YAML

  • 分享至 

  • xImage
  •  

目錄

摘要

在上一篇我們學到了如何用YAML表達陣列、物件,但是其實表達物件型別的style分為兩種

在這篇會說明另一種,以及兩種的差異

Block style

block style是YAML的一種常見的定義資料格式的方式

上一篇中的例子、一般來說在workflow中使用就是block style

當以這種風格撰寫時,物件、陣列長得有點像Markdown的列表。特點是元素會以換行、縮排隔開

這種style的優點是更加地彈性、好閱讀、好維護

Flow 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的優點

第一次接觸YAML的人可能會不太習慣、覺得JSON比較好,並對於為何各大DevOps工具皆採用YAML而不是JSON感到疑惑

這邊舉一些在workflow的片段為例子,來看一下究竟YAML有什麼優點

  1. 更簡潔的語法

當資料結構複雜時,由於YAML不用{}和,,因此會比JSON更簡潔、更易讀

尤其是在workflow中使用變數、placeholder時特別明顯

run: echo "${{ env.Greeting }}!"
  1. 利於複雜結構

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?"
  1. 支援註解

DevOps工具的config通常會比一般的資料來的複雜,所以為了幫助後人了解整個workflow的內容,註解就會變得很重要

on:
  schedule:
    # 每個月的每天,如果是週一、週三,那就在 1:30 (UTC+0) 時執行
    - cron: '30 1 * * 1,3'

上一篇
Day 03 - YAML基本語法
下一篇
Day 05 - workflow的組成
系列文
菜逼八用Github Actions29
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言