隨著遊戲微服務計劃的進展,多數組別可以開始建立 Walking Skeleton,其中一項重要的工作就是將「編譯、測試、部署」的動作自動化,它是典型的 CI/CD 工作的範圍。而各組的原始碼目前以 GitHub 代管為主,我們就能運用 GitHub Actions 簡單實作出 CI/CD Pipeline。
一旦這類的「庶務」被自動化後,這樣特定的工作不會「相依於」特定人士或某位同事的電腦了。
{%youtube RJo7baj6cYM %}
- 一個 YAML 檔就是在寫一份 Workflow 的內容,一個 Workflow 內有多個 Jobs,而 Jobs 內由多個 Steps 組成
- 而 Step 中的每一步,就是
Action
,它可以是別人寫好的,可以複用的 Action,或是任意 Script 的run
action
可以呦,相當鼓勵讓你的 Workflow 專注它本身的任務。這我們能延續關注點分離來想它,儘量不要讓大腦超載而無法順暢地思考。
在一個遊戲微服務的專案中,通常前端與後端會在一起,那你可能會有這幾個 YAML (workflow)
- 前端的 CI (build and test)
- 後端的 CI (build and test)
- 前後端一起的 CD (build and test and deploy)
或是再另外提供獨立的 Deployment:
- 前端的 CD (build and test and deploy)
- 前端的 CD (build and test and deploy)
- 針對特定 release tag 的 CD
- 全寫在一起理論上做得到,但實務上會很痛苦呦!這樣你就會看像 YAML 像寫程式一樣,一堆的條件判斷在各別的 Step 內。
- 分開寫除了「用途」「意途」的原因,還有語法上的問題。Workflow 依我們的入門介紹中分為二大區塊:
Listener
與Handler
我們透過 Listener
能控制適當的關注範圍,例如:
- 針對前端的 CI,只 watch 相關實體路徑 (ex.
frontend/**
) 的 Pull Request 事件 - 針對後端的 CI,只 watch 相關實體路徑 (ex.
backend/**
) 的 Pull Request 事件 - 針對前後端的 CD,只 watch 特定的 release branch 的 Push 事件,例如
release/v0.1
- 針對前後端的 CD,只 watch 特定的 release tag 的 Push 事件,例如
tags/v0.1