Heim >Backend-Entwicklung >Python-Tutorial >Implementierung von CI/CD für ReadmeGenie

Implementierung von CI/CD für ReadmeGenie

Susan Sarandon
Susan SarandonOriginal
2024-11-22 05:28:12932Durchsuche

Implementing CI/CD for ReadmeGenie

Warum CI/CD?

Bevor wir uns mit der Einrichtung befassen, wollen wir kurz erläutern, warum CI/CD so wichtig ist:

  1. Automatisierte Tests: Das automatische Ausführen von Tests stellt sicher, dass der Code bei jeder Änderung stabil ist.
  2. Konsistenz: CI/CD erzwingt Standards (Linting, Formatierung) in der gesamten Codebasis.
  3. Zuverlässigkeit: Automatisierte Prüfungen und Tests minimieren menschliche Fehler und verbessern die Codezuverlässigkeit.
  4. Schnelles Feedback: Entwickler erhalten sofortiges Feedback zur Codequalität, sodass Probleme frühzeitig erkannt werden können.

In ReadmeGenie haben wir GitHub Actions als unser CI/CD-Tool genutzt. Es lässt sich reibungslos in GitHub-Repositorys integrieren und bietet Flexibilität und Automatisierung durch YAML-Konfigurationsdateien.

Die CI/CD-Pipeline für ReadmeGenie

Unsere CI/CD-Pipeline umfasst die folgenden automatisierten Schritte:

  1. Linting- und Formatierungsprüfungen: Wir führen Ruff und Black aus, um Codestil und Konsistenz sicherzustellen.
  2. Unit-Tests: Wir verwenden Unittest, um zu überprüfen, dass Codeänderungen die vorhandene Funktionalität nicht beeinträchtigen.
  3. Abdeckungsanalyse: Wir verwenden Coverage.py, um sicherzustellen, dass der Code unseren Abdeckungsschwellenwert erreicht, bevor ein Commit zulässig ist.
  4. Pre-Commit-Hooks: Wir haben Hooks hinzugefügt, um lokale Qualitätsprüfungen durchzusetzen, bevor Änderungen übertragen werden.

Übersicht über den GitHub Actions Workflow

Der CI-Workflow ist in .github/workflows/python-app.yml definiert. Hier ist eine Aufschlüsselung der einzelnen Teile des Workflows:

1. Auslösen des Workflows

Der Workflow wird bei jeder Push- und Pull-Anfrage an den Hauptzweig ausgeführt. Dadurch wird sichergestellt, dass alle Codeänderungen einer Validierung unterzogen werden, bevor sie in die Produktion übernommen werden.

name: Python application

on:
  push:
    branches: ["main"]
  pull_request:
    branches: ["main"]

2. Einrichten der Python-Umgebung

Wir konfigurieren GitHub Actions für die Verwendung von Python 3.12.x und stellen so die Konsistenz mit unserer lokalen Entwicklungsumgebung sicher. Dieser Schritt installiert die spezifische Python-Version und bereitet die Umgebung für die Abhängigkeitsinstallation vor.

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. Abhängigkeiten installieren

Der nächste Schritt besteht darin, Projektabhängigkeiten zu installieren. Hier aktualisieren wir pip und installieren die Datei „requirements.txt“. Dadurch werden die dort angegebenen zusätzlichen Abhängigkeiten installiert.

      - 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. Durchführung von Linting- und Code-Qualitätsprüfungen

Linting ist ein entscheidender Teil unseres Workflows und stellt sicher, dass der Code den festgelegten Qualitätsstandards entspricht. Wir führen flake8 mit Optionen zur Kennzeichnung von Syntaxfehlern, undefinierten Namen und Komplexitätsproblemen aus.

name: Python application

on:
  push:
    branches: ["main"]
  pull_request:
    branches: ["main"]

5. Ausführen von Tests mit Abdeckungsanalyse

Für Unit-Tests verwenden wir pytest, um alle Testfälle auszuführen. Darüber hinaus nutzen wir die Abdeckung, um zu verfolgen, welche Codezeilen getestet werden, und stellen so sicher, dass unsere Testsuite den definierten Abdeckungsschwellenwert von 75 % erreicht.

Mit den folgenden Befehlen werden die Tests ausgeführt und ein Abdeckungsbericht erstellt, der etwaige Lücken in der Testabdeckung hervorhebt. Dies ist für die Qualitätssicherung unerlässlich, da ungetesteter Code eine potenzielle Quelle zukünftiger Fehler darstellt.

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"

Diese Abdeckungsprüfung stellt einen hohen Standard an Codequalität sicher, indem sie erzwingt, dass mindestens 75 % der Codebasis durch Tests abgedeckt werden. Wenn die Abdeckung unter diesen Schwellenwert fällt, wird das Commit nicht zugelassen.

Integration von Pre-Commit-Hooks

Zusätzlich zu CI/CD richten wir Pre-Commit-Hooks ein, um die Codequalität lokal durchzusetzen, bevor Änderungen in das Repository übertragen werden. Diese Haken:

  • Führen Sie Ruff zum Flusen und Black zum Formatieren aus.
  • Erzwingen Sie einen Mindestabdeckungsschwellenwert, indem Sie die Tests lokal mit Abdeckung ausführen.

So haben wir die Abdeckungsprüfung als Pre-Commit-Hook in .pre-commit-config.yaml hinzugefügt:

      - 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

Herausforderungen und gewonnene Erkenntnisse

Das Einrichten von CI/CD erforderte ein tiefes Verständnis dafür, wie verschiedene Tools (flake8, pytest, cover) innerhalb von GitHub Actions interagieren. Hier sind einige Herausforderungen, denen wir gegenüberstanden, und die Lösungen, die wir umgesetzt haben:

Umgang mit unterschiedlichen lokalen und Remote-Konfigurationen

Wir sind auf Probleme mit Umgebungsvariablenkonflikten gestoßen, insbesondere beim Testen der API-Integration und der Konfigurationsverarbeitung. Durch die Verwendung von @patch.dict und anderen Spotttechniken in Unittest konnten wir die Umgebung effektiv simulieren.

Testen von Abdeckung und Schwellenwerten

Die größte Herausforderung bestand darin, eine ausreichende Testabdeckung sicherzustellen. Die Verwendung von cover.py mit --fail-under=75 sowohl in GitHub-Aktionen als auch in Pre-Commit-Hooks hat zur Durchsetzung dieses Standards beigetragen.

Zukünftige Verbesserungen

Um die CI/CD-Pipeline robuster zu machen, planen wir Folgendes:

  1. Bereitstellungsphasen hinzufügen: Automatisieren Sie die Bereitstellung in einer Staging- oder Produktionsumgebung, nachdem die Tests bestanden wurden.
  2. Codequalitätsabzeichen automatisieren: Fügen Sie dynamische Abzeichen hinzu, um Abdeckung, Flusenstatus und Testergebnisse in der README-Datei anzuzeigen.
  3. Abdeckungsanforderungen erweitern: Erhöhen Sie den Abdeckungsschwellenwert, wenn wir die Tests verbessern und mehr Randfälle abdecken.

Wegbringen

Durch dieses Projekt wurde mir klar, wie wichtig es ist, frühzeitig robuste Test- und CI/CD-Praktiken zu etablieren. Wenn ich noch einmal anfangen würde, würde ich mich darauf konzentrieren, von Anfang an umfassende Tests zu schreiben und diese im Laufe des Projekts schrittweise zu erweitern und zu verbessern. Dieser Ansatz würde fehlende Zweige oder ungetestete Bereiche verhindern und sicherstellen, dass sich der gesamte neue Code reibungslos in eine gut abgedeckte Codebasis integriert.

Das obige ist der detaillierte Inhalt vonImplementierung von CI/CD für ReadmeGenie. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn