---
# System prepended metadata

title: 遊戲微服務的 GitHub Actions 入門

---

# 遊戲微服務的 GitHub Actions 入門

隨著遊戲微服務計劃的進展，多數組別可以開始建立 Walking Skeleton，其中一項重要的工作就是將「編譯、測試、部署」的動作自動化，它是典型的 CI/CD 工作的範圍。而各組的原始碼目前以 GitHub 代管為主，我們就能運用 GitHub Actions 簡單實作出 CI/CD Pipeline。

一旦這類的「庶務」被自動化後，這樣特定的工作不會「相依於」特定人士或某位同事的電腦了。


https://youtu.be/RJo7baj6cYM

{%youtube RJo7baj6cYM %}

# 常見的問題



## Q. GitHub Action 的基本結構是什麼呢？

1. 一個 YAML 檔就是在寫一份 Workflow 的內容，一個 Workflow 內有多個 Jobs，而 Jobs 內由多個 Steps 組成
2. 而 Step 中的每一步，就是 `Action`，它可以是別人寫好的，可以複用的 Action，或是任意 Script 的 `run` action

## Q. 我能寫多組 YAML 在 .github/workflows/ 嗎？

可以呦，相當鼓勵讓你的 Workflow 專注它本身的任務。這我們能延續關注點分離來想它，儘量不要讓大腦超載而無法順暢地思考。

在一個遊戲微服務的專案中，通常前端與後端會在一起，那你可能會有這幾個 YAML (workflow)

1. 前端的 CI (build and test)
2. 後端的 CI (build and test)
3. 前後端一起的 CD (build and test and deploy)

或是再另外提供獨立的 Deployment：

1. 前端的 CD (build and test and deploy)
2. 前端的 CD (build and test and deploy)
3. 針對特定 release tag 的 CD

## Q. 分開寫真的好處那麼多嗎？我硬是想合在一起也可以嗎？

1. 全寫在一起理論上做得到，但實務上會很痛苦呦！這樣你就會看像 YAML 像寫程式一樣，一堆的條件判斷在各別的 Step 內。
2. 分開寫除了「用途」「意途」的原因，還有語法上的問題。Workflow 依我們的入門介紹中分為二大區塊： `Listener` 與 `Handler`

我們透過 `Listener` 能控制適當的關注範圍，例如：

1. 針對前端的 CI，只 watch 相關實體路徑 (ex. `frontend/**`) 的 Pull Request 事件
2. 針對後端的 CI，只 watch 相關實體路徑 (ex. `backend/**`) 的 Pull Request 事件
3. 針對前後端的 CD，只 watch 特定的 release branch 的 Push 事件，例如 `release/v0.1`
3. 針對前後端的 CD，只 watch 特定的 release tag 的 Push 事件，例如 `tags/v0.1`
