Heim >Backend-Entwicklung >Python-Tutorial >Implementierung von CI/CD für ReadmeGenie
Bevor wir uns mit der Einrichtung befassen, wollen wir kurz erläutern, warum CI/CD so wichtig ist:
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.
Unsere CI/CD-Pipeline umfasst die folgenden automatisierten Schritte:
Der CI-Workflow ist in .github/workflows/python-app.yml definiert. Hier ist eine Aufschlüsselung der einzelnen Teile 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"]
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"
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
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"]
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.
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:
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
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:
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.
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.
Um die CI/CD-Pipeline robuster zu machen, planen wir Folgendes:
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!