Playwright基礎篇(十):進階功能CI/CD

CI/CD 基本概念詳解
持續整合(Continuous Integration, CI)
定義與核心理念
持續整合是一種軟體開發實踐,強調開發團隊成員經常性地將他們的程式碼變更合併到中央代碼庫中。 每次整合都會觸發自動化構建和測試,以確保程式碼的品質和一致性。
CI 的主要目標
- 即時檢測問題
- 在程式碼變更後立即運行自動化測試
- 快速識別并修復軟體缺陷
- 減少後期修復的複雜性和成本
- 提高協作效率
- 減少開發人員之間的整合衝突
- 實現代碼的持續、平滑整合
- 提供即時的品質反饋
CI 工作流程
graph TD
A [開發者提交代碼] --> B[代碼推送至版本倉庫]
B --> C[觸發自動化構建]
C --> D[運行單元測試]
D --> E{測試是否通過?}
E -->|通過| F[生成構建報告]
E -->|失敗| G[通知開發團隊]
F --> H[代碼可部署]
G --> I[修復問題]
持續部署(Continuous Deployment, CD)
定義與核心理念
持續部署是持續交付的進階階段,指每一個通過自動化測試的程式碼變更都會自動部署到生產環境。
CD 的主要特點
- 全自動化部署流程
- 無需人工干預
- 從代碼提交到生產環境的自動化流程
- 快速且一致的軟體交付
風險控制
灰度發佈(Canary Deployment)
- 概念:將新版本逐步推向生產環境
- 實施方法:
小規模用戶首先體驗新版本
監控系統運行狀態
根據反饋決定是否全面推廣
- 實施方法:
- 金絲雀發佈(Canary Release)
- 定義:類似灰度發佈,但更強調監控和快速回滾
- 特點:
選擇少量用戶或伺服器測試
持續監控系統指標
快速驗證新版本性能和穩定性
- 特點:
- 定義:類似灰度發佈,但更強調監控和快速回滾
CD 工作流程
graph TD
A[代碼通過CI測試] --> B[自動構建]
B --> C[部署到測試環境]
C --> D[執行整合測試]
D --> E{測試是否通過?}
E -->|通過| F[部署到預生產環境]
E -->|失敗| G[阻止部署]
F --> H[自動部署到生產環境]
H --> I[監控系統運行狀態]
自動化測試在 CI/CD 中的關鍵角色
測試類型
- 單元測試
- 驗證代碼的最小可測試單元
- 快速執行,提供即時反饋
- 整合測試
- 檢查不同模組之間的交互
- 確保系統各部分協同工作
- 端到端測試
- 模擬真實用戶場景
- 驗證整個系統的功能和性能
CI/CD 常用工具
- GitHub Actions
- GitLab CI
- Azure DevOps
- Jenkins (開源)
- Other CI (Drone CI, Circle CI, Travis CI, etc.)
Visual Studio Code + GitHub Actions
所需工具:
- Visual Studio Code
- Git
- Node.js
- GitHub 帳號
GitHub Actions 範例配置
.github/workflows/ci.yml
name: Playwright Tests
on:
push:
branches: [ main, master ]
pull_request:
branches: [ main, master ]
jobs:
test:
name: 'Playwright Tests'
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: Set up Node.js
uses: actions/setup-node@v3
with:
node-version: '18'
cache: 'npm'
- name: Install dependencies
run: npm ci
- name: Install Playwright browsers
run: npx playwright install --with-deps
- name: Run Playwright tests
run: npx playwright test
- name: Upload test results
if: always()
uses: actions/upload-artifact@v3
with:
name: playwright-report
path: playwright-report/
retention-days: 30
常用工具介紹
Jenkins(本地搭建)
Jenkins 是開源自動化伺服器,是現代軟體開發中持續集成和持續交付 (CI/CD) 的核心工具。它允許開發者自動化建置、測試和部署軟體,大大提高了開發效率和代碼質量。
系統需求
- Java 8 或 Java 11(推薦)
- 最低 2GB 記憶體
- 推薦 4GB+ RAM
- 50GB 硬碟空間
安裝環境
支援 Linux/Windows/MacOS
安裝方式 (以 Linux (Ubuntu/Debian) 為例)
# 1. 安裝 Java
sudo apt update
sudo apt install openjdk-11-jdk
# 2. 導入 Jenkins 倉庫密鑰
wget -q -O - https://pkg.jenkins.io/debian-stable/jenkins.io.key | sudo apt-key add -
# 3. 添加 Jenkins 倉庫
sudo sh -c 'echo deb https://pkg.jenkins.io/debian-stable binary/ > /etc/apt/sources.list.d/jenkins.list'
# 4. 安裝 Jenkins
sudo apt update
sudo apt install jenkins
# 5. 啟動 Jenkins 服務
sudo systemctl start jenkins
sudo systemctl enable jenkins
安裝方式 (以 Windows 為例)
- 下載 Jenkins 安裝檔
- 執行安裝精靈
- 設定初始管理員帳號
- 安裝建議外掛,常見建議外掛包括:
- Git 整合外掛
- GitHub 外掛
基本架構
代碼倉庫 → Jenkins 伺服器 → 構建節點 → 部署環境
(Git) → (Master) → (Slave) → (測試/生產)
GitLab CI
GitLab CI 是內建於 GitLab 的持續整合與持續部署(CI/CD)工具,讓開發團隊能夠直接在程式碼倉庫中進行自動化建置、測試和部署。
Linux 安裝方式
# 安裝 GitLab Repository
curl -L "https://packages.gitlab.com/install/repositories/gitlab/gitlab-ce/script.deb.sh" | sudo bash
# 安裝 GitLab
sudo apt-get install gitlab-ce
# 初始配置
sudo gitlab-ctl reconfigure
Windows 安裝步驟
- 下載 GitLab 安裝檔
- 執行安裝精靈
- 設定初始管理員帳號
- 配置 GitLab Runner
關鍵特性
- 原生容器支持
- 內建 CI/CD 管線
- 輕量級架構
- 直接整合程式碼倉庫
配置流程
- 建立
.gitlab-ci.yml
- 定義建置階段
- 設定部署目標
- 提交代碼觸發流程
其他工具
Travis CI
這是一個雲端託管的持續整合服務,主要用於測試託管在 GitHub 和 Bitbucket 上的軟體專案,透過簡單的 YAML 配置文件自動執行建置和測試。
Drone CI
Drone CI 是一個開源的持續交付平台,它使用容器化的工作負載,可以輕鬆地在任何環境中部署,並且提供靈活的插件系統。
Circle CI
CircleCI 是一個彈性且快速的持續整合/持續交付平台,它提供強大的自定義選項和並行處理能力,以加速軟體開發週期。
推薦學習路徑
-
基礎環境準備
- 安裝 Git
- 安裝 Node.js
- 註冊 GitHub 帳號
-
初步練習
- 創建簡單的 Web 應用
- 編寫基本測試腳本
- 配置 GitHub Actions
-
進階實踐
- 多環境測試
- 通知整合
- 複雜部署流程
實戰建議
- 從小型專案開始
- 遵循 CI/CD 最佳實踐
- 持續學習和實踐
- 參與開源項目,積累經驗
希望這份指南能幫助你開始 CI/CD 的學習之旅!
分享這篇文章: