Implementierung von CI/CD für ReadmeGenie
Nov 22, 2024 am 05:28 AMWarum CI/CD?
Bevor wir uns mit der Einrichtung befassen, wollen wir kurz erläutern, warum CI/CD so wichtig ist:
- Automatisierte Tests: Das automatische Ausführen von Tests stellt sicher, dass der Code bei jeder Änderung stabil ist.
- Konsistenz: CI/CD erzwingt Standards (Linting, Formatierung) in der gesamten Codebasis.
- Zuverlässigkeit: Automatisierte Prüfungen und Tests minimieren menschliche Fehler und verbessern die Codezuverlässigkeit.
- 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:
- Linting- und Formatierungsprüfungen: Wir führen Ruff und Black aus, um Codestil und Konsistenz sicherzustellen.
- Unit-Tests: Wir verwenden Unittest, um zu überprüfen, dass Codeänderungen die vorhandene Funktionalität nicht beeinträchtigen.
- Abdeckungsanalyse: Wir verwenden Coverage.py, um sicherzustellen, dass der Code unseren Abdeckungsschwellenwert erreicht, bevor ein Commit zulässig ist.
- 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:
- Bereitstellungsphasen hinzufügen: Automatisieren Sie die Bereitstellung in einer Staging- oder Produktionsumgebung, nachdem die Tests bestanden wurden.
- Codequalitätsabzeichen automatisieren: Fügen Sie dynamische Abzeichen hinzu, um Abdeckung, Flusenstatus und Testergebnisse in der README-Datei anzuzeigen.
- 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!

Heißer Artikel

Hot-Tools-Tags

Heißer Artikel

Heiße Artikel -Tags

Notepad++7.3.1
Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version
Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1
Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6
Visuelle Webentwicklungstools

SublimeText3 Mac-Version
Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Heiße Themen

Wie benutze ich eine schöne Suppe, um HTML zu analysieren?

So herunterladen Sie Dateien in Python

So verwenden Sie Python, um die ZiPF -Verteilung einer Textdatei zu finden

Wie man mit PDF -Dokumenten mit Python arbeitet

Wie kann man mit Redis in Django -Anwendungen zwischenstrichen

Wie führe ich ein tiefes Lernen mit Tensorflow oder Pytorch durch?

Einführung des natürlichen Sprach -Toolkits (NLTK)
