使用 Github Actions 作為簡易 CI

TH Chang
iCHEF
Published in
4 min readSep 20, 2019

目前仍在 beta 中的 Github Actions 推出已一段時間;日前進行大規模改版,宣布更朝向 CI/CD 方向演進。最近剛好在設立新的 React repo,就順便試試看純粹用 Github Action 來做一些自動化測試。

Github Actions 跑完之後會對你的 commit 打勾,可以用來作 PR 的初步檢查

建立一份 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 輸出 → 現在可以了
Github Actions 現在執行時可以看到即時 console 輸出時
  • 無法直接重新啟動 Job → 現在也可以了,不過看起來是整份 workflow 一起重跑
Github Actions 現在可以重跑整份 workflow

希望大家都在 Github 上玩得愉快 (?

--

--