上一篇說明了如何利用 Jenkins 來執行自動化測試,而這一篇則會來說明 GubHub Actions 要如何執行自動化作業。
GitHub Actions 是一套由 GitHub 提供的 CI/CD 工具,我們可以利用 YAML 文件來定義每個自動化要執行的步驟。GitHub Actions 也允許工程人員把撰寫好的 Actions 工具發佈出來,給其他有需要的專案使用。
name: Action Name
on:
  push:
    branches:
      - master
jobs:
  build:
    runs-on: ubuntu-latest
    steps:
      ...
要使用 Github Actions 很簡單,我們只要在 .github/workflows 目錄內加入一或多個 *.yml 檔案,GitHub 就會依此目錄的檔案內容設定執行自動化程式。
因此,如同 Jenkins 一樣,我們可以在 .github/workflows 加入 feature-action.yml 檔案,來定義當 Feature 分支被推上去之後所要執行自動化作業。
name: Angular Build
on:
  push:
    branches:
      - feature/*
jobs:
  build:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v2.3.4
      - name: Setup Node
        uses: actions/setup-node@v2.1.5
        with:
          node-version: 18.x
      - name: Package Restore
        run: npm install
      - name: Unit Testing
        run: npm run test:headless
      - name: E2E Testing
        run: npm run e2e:run
      - name: Upload coverage to Codecov
        uses: codecov/codecov-action@v1
如上面程式所示,此 GitHub Actions 作業使用 actions/checkout 與 actions/setup-node 來切換分支與指定 Node 版本;接著與前一篇相同,依續執行安裝 NPM 套件、執行單元測試作業與執行端對端測試作業等作業;最後,則將測試覆蓋資訊更新至 CodeCov 服務。順帶一提,若要讓測試覆蓋報表能整合至 CodeCov 服務,需要在 karma.conf.js 組態檔加入類型為 lcovonly 的測試覆蓋報表。
coverageReporter: {
  dir: require("path").join(
    __dirname,
    "./coverage/ironman-2022-angular-test-example"
  ),
  subdir: ".",
  reporters: [
    { type: "html" },
    { type: "text-summary" },
    { type: "lcovonly" },
  ],
}
這一篇說明使用 GitHub Action 來執行自動化作業,透過 CI/CD 工具執行自動化可以讓我們推上程式時,執行如測試、發佈與通知等一連串的作業,來減少人工作業的時間與成本。