首頁 > 後端開發 > Python教學 > 為 ReadmeGenie 實作 CI/CD

為 ReadmeGenie 實作 CI/CD

Susan Sarandon
發布: 2024-11-22 05:28:12
原創
900 人瀏覽過

Implementing CI/CD for ReadmeGenie

為什麼是持續整合/持續交付?

在我們深入了解設定之前,讓我們先簡單介紹一下為什麼 CI/CD 如此重要:

  1. 自動化測試:自動執行測試可確保代碼在每次變更時保持穩定。
  2. 一致性:CI/CD 在整個程式碼庫中強制執行標準(linting、格式化)。
  3. 可靠性:自動檢查和測試最大限度地減少人為錯誤並提高程式碼可靠性。
  4. 快速回饋:開發人員會收到有關程式碼品質的即時回饋,以便及早發現問題。

ReadmeGenie 中,我們利用 GitHub Actions 作為我們的 CI/CD 工具。它與 GitHub 儲存庫順利集成,並透過 YAML 設定檔提供靈活性和自動化。

ReadmeGenie 的 CI/CD 管道

我們的 CI/CD 管道包括以下自動化步驟:

  1. Linting 和格式檢查:我們運行 RuffBlack 以確保程式碼風格和一致性。
  2. 單元測試:我們使用單元測試來驗證程式碼變更不會破壞現有功能。
  3. 覆蓋率分析:我們使用Coverage.py來確保程式碼在允許提交之前滿足我們的覆蓋率閾值。
  4. 預先提交掛鉤:我們添加了掛鉤以在推送更改之前強制執行本地品質檢查。

GitHub Actions 工作流程概述

CI 工作流程在 .github/workflows/python-app.yml 中定義。以下是工作流程每個部分的詳細說明:

1. 觸發工作流程

工作流程在主分支的每個推送和拉取請求上執行。這可確保所有程式碼變更在合併到生產環境之前都經過驗證。

name: Python application

on:
  push:
    branches: ["main"]
  pull_request:
    branches: ["main"]
登入後複製
登入後複製

2. 設定Python環境

我們將 GitHub Actions 設定為使用 Python 3.12.x,確保與本機開發環境的一致性。此步驟安裝特定的Python版本並準備依賴安裝的環境。

jobs:
  build:
    runs-on: ubuntu-latest

    steps:
      - uses: actions/checkout@v4
      - name: Set up Python 3.12.x
        uses: actions/setup-python@v3
        with:
          python-version: "3.12.x"
登入後複製
登入後複製

3. 安裝依賴項

下一步是安裝專案相依性。在這裡,我們升級pip並安裝requirements.txt文件,它將安裝其中指定的附加依賴項。

      - name: Install dependencies
        run: |
          python -m pip install --upgrade pip
          pip install flake8 pytest
          if [ -f requirements.txt ]; then pip install -r requirements.txt; fi
登入後複製
登入後複製

4. 運行 Linting 和程式碼品質檢查

Linting 是我們工作流程的重要組成部分,確保程式碼符合指定的品質標準。我們運行 flake8,並帶有標記語法錯誤、未定義名稱和複雜性問題的選項。

name: Python application

on:
  push:
    branches: ["main"]
  pull_request:
    branches: ["main"]
登入後複製
登入後複製

5. 透過覆蓋率分析運行測試

對於單元測試,我們使用 pytest 來運行所有測試案例。此外,我們使用覆蓋率來追蹤測試了哪些程式碼行,確保我們的測試套件符合定義的 75% 覆蓋率閾值。

以下命令執行測試並產生覆蓋率報告,突出顯示測試覆蓋率中的任何差距。這對於品質保證至關重要,因為未經測試的程式碼是未來錯誤的潛在來源。

jobs:
  build:
    runs-on: ubuntu-latest

    steps:
      - uses: actions/checkout@v4
      - name: Set up Python 3.12.x
        uses: actions/setup-python@v3
        with:
          python-version: "3.12.x"
登入後複製
登入後複製

此覆蓋率檢查透過強制測試覆蓋至少 75% 的程式碼庫來確保高標準的程式碼品質。如果覆蓋率低於此閾值,則不允許提交。

整合預提交掛鉤

除了 CI/CD 之外,我們還設定了預提交掛鉤,以在將任何變更推送到儲存庫之前在本地強制執行程式碼品質。這些鉤子:

  • 執行 Ruff 進行 linting,執行 Black 進行格式化。
  • 透過在本地運行覆蓋率測試來強制執行最低覆蓋率閾值。

以下是我們如何將覆蓋率檢查新增為 .pre-commit-config.yaml 中的預先提交掛鉤:

      - name: Install dependencies
        run: |
          python -m pip install --upgrade pip
          pip install flake8 pytest
          if [ -f requirements.txt ]; then pip install -r requirements.txt; fi
登入後複製
登入後複製

挑戰和經驗教訓

設定 CI/CD 需要深入了解不同工具(flake8、pytest、coverage)如何在 GitHub Actions 中互動。以下是我們面臨的一些挑戰以及我們實施的解決方案:

處理不同的本地和遠端配置

我們遇到了環境變數衝突的問題,特別是在測試 API 整合和組態處理時。在單元測試中使用 @patch.dict 和其他模擬技術使我們能夠有效地模擬環境。

測試覆蓋率和閾值

最大的挑戰是確保足夠的測試覆蓋率。在 GitHub Actions 和預提交掛鉤中使用帶有 --fail-under=75 的coverage.py 有助於執行此標準。

未來的改進

為了讓 CI/CD 管道更強大,我們計畫:

  1. 新增部署階段:測試通過後自動部署到暫存或生產環境。
  2. 自動化程式碼品質徽章:新增動態徽章以在 README 中顯示覆蓋率、linting 狀態和測試結果。
  3. 擴大覆蓋範圍要求:隨著我們改進測試並覆蓋更多邊緣情況,提高覆蓋範圍閾值。

外賣

透過這個項目,我意識到儘早建立強大的測試和 CI/CD 實踐的重要性。如果我重新開始,我會專注於從一開始就編寫全面的測試,並隨著專案的進展逐步擴展和改進它們。這種方法可以防止丟失分支或未經測試的區域,並確保所有新程式碼順利整合到覆蓋良好的程式碼庫中。

以上是為 ReadmeGenie 實作 CI/CD的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:dev.to
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板