如何使用 Gitlab 搭配 Gitlab CI/CD 進行自動化測試

如何對在 Gitlab 上面的專案進行 CI/CD 可以怎麼做呢? Gitlab 可以搭配 Gitlab CI/CD 來執行 CI/CD , Gitlab CI/CD 會依照所設定的設定檔將指令交由 Gitlab Runner 來執行進而完成整個 Pipeline ,在 Gitlab CI 的世界有幾個名詞。

  • Pipeline: 一個 CI/CD 的流程,串接多個 Job 與多個 Stage 組成,任何一個 Job 失敗都視為這個 Pipeline 失敗(除非該 Job 有設定為 allow fail )。
  • Stage: 階段,一個 Stage 可以由多個 Job 組成,同個 Stage 中的 Job 都必須通過才會執行下個 Stage 。
  • Job: 工作,依照 .gitlab-ci.yaml 所設定之設定交由 Gitlab Runner 來執行,並且提交這個 Job 的執行狀態(綠燈、橘燈、紅燈)。

在 repository 根目錄直接新增 .gitlab-ci.yaml 檔案,這邊有個範例給大家參考。

stages: // 定義這個 Pipeline 有的 Stage
  - build // Stage 名稱
  - test

Build: // Job 名稱
  stage: build // stage name 需要與上方的 stages 名稱一致
  image: composer // 這個 Job 需要使用的 docker image ,以範例來說使用的是 compose:latest
  cache:
    key: "$CI_COMMIT_REF_SLUG"
    paths:
      - vendor/
  script: // 需要執行的指令
    - composer install --ignore-platform-reqs
  artifacts: // 透過 artifacts 將 vendor 這個資料夾 pass 給下個 Stage 的 Job 使用
    expire_in: '10 mins'
    paths:
      - vendor/

Test:
  stage: test
  image: php:7.4-cli
  script:
    - ./vendor/bin/phpunit // 執行 PHPUnit 測試

通常在 Continuous Integration(CI) 階段我們會設計一些流程來進行專案的驗證,目的在於透過自動化導入檢測並且減少人為介入進而提升專案穩定度。

  • 專案安裝
  • 專案檢測(靜態程式碼分析、 coding style 檢查、 docker image best practice 檢測 …)
  • 專案測試
    • 單元測試 Unit Test
    • 整合測試 Acceptance Test
    • End-to-End Testing
  • 專案打包(在容器化世代通常會需要打包 docker image 供其他容器管理器進行使用)

當然在 CI 階段可以做的事情不只這些,就看專案的特性來進行調整即可,撰寫 .gitlab-ci.yaml 完成後執行 git push 推送到專案上就會生效了,即可在 Gitlab > Repo > CI/CD > Pipelines 看到執行結果。

https://gitlab.com/coosos810609/phpunit-demo-with-ci/pipelines/134780795

每個 Stage 中各自 Job 的執行狀態也可以直接點擊查看,畫面中可以看到會將設定在 .gitlab-ci.yaml 中的指令一一執行,並且將執行結果呈現在畫面中。

https://gitlab.com/coosos810609/phpunit-demo-with-ci/-/jobs/506685408

如果執行的過程中有任何的錯誤都可以透過這邊進行 Debug ,下篇再與大家分享如何優化所撰寫的 .gitlab-ci.yaml 檔案。

發表迴響

你的電子郵件位址並不會被公開。 必要欄位標記為 *