建立一份 Workflow
Github Actions 在這次改版之後,把工作流程的設定檔從第一次公測時的 HCL syntax 改成了 YAML。一個 .yml
檔就是一個 workflow。只要放在 repo 下面的 .github/workflows/
資料夾下面,就可以了。
一份 Workflow 可以對應到一組觸發條件。觸發條件可以是單個、也可以同時對應到多個事件。內容大概會長這樣:
name: Workflow Name
on: [push, pull_request]jobs:
build:
name: Build
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v1
- uses: actions/setup-node@v1
with:
node-version: '10.x'
- run: yarn install
- run: yarn build
最外面先指定觸發時機、裡面再定義要跑的 job。如果有定義多個 job、彼此之間又沒有指定先後關係的話,這些 job 就會平行下去一起跑。
值得注意的是,會觸發 Workflow 的 Event 是可能同時遇到的。以上面例子為例, [push, pull_request]
的結果就會導致你 push 新 commit 進 PR 時,兩個 event 各跑一次 actions。可能會導致無謂的重複流程。
這邊有列出所有可以用來觸發 Workflow 的 Event。
設定 Job 跟裡面要做的步驟
有了一份 Workflow 之後,下一步是要指定觸發時他應該要做的事情。一份 Workflow 可以同時有多個 Job,可以平行一起跑、也可以要求 Job A 要先等 Job B 執行完再開跑。
Job 裡面的每個步驟,可以使用別人預先寫好的一個 Action、也可以單純在 shell 執行某個指令。以上面的範例來說,這個 Job 的步驟分別就是:
1. 使用 actions/checkout@v1 讓 Workflow 吃得到 repo 的內容
2. 使用 actions/setup-node@v1 讓 shell 裡面有 Node 10.x 環境可以用
3. 在 shell 下面執行 yarn install 安裝必要的套件
4. 在 shell 下面執行 yarn build 來把 code compile 起來
到這邊,就可以讓 Github 幫你跑一個本來需要丟給 CI 去跑的工作了。以我們目前用到的來說,我讓 Github 在 pull_request
時幫我平行跑 Build 跟 Test,以便確認推上去的 code 沒有不應該出現的問題。
其他關於 Github Actions 的新消息
在本文結束之前,我想順便回顧一下 AppleBoy 大大今年五月時,寫下在 Github Actions 所踩過的雷。當時裡面提及的幾項缺點,在這個新 iPhone 開賣的九月天已經解決不少,相當令人慶幸:
- 無法及時看到 Log 輸出 → 現在可以了
- 無法直接重新啟動 Job → 現在也可以了,不過看起來是整份 workflow 一起重跑
- 環境變數太少 → 現在可以透過 Github Actions context 拿到更多相關的環境資訊。
希望大家都在 Github 上玩得愉快 (?