NCA Social Media
Aktualisiert:
Autor:
Roland Golla
Grüne Pipeline mit Schranken als PHP Quality Gates

Was PHP Quality Gates sind

PHP Quality Gates sind automatische Prüfungen in der CI Pipeline, die jeder Commit bestehen muss, bevor er gemergt wird. Typische Gates sind statische Analyse mit PHPStan, ein Rector Trockenlauf, PHPUnit Tests mit Coverage und E2E Tests mit Cypress.

Fällt ein Gate durch, wird der Merge blockiert. Das klingt streng, macht Refactoring aber erst sicher. Wer Code umbaut, braucht eine Instanz, die sofort meldet, wenn sich Verhalten oder Typen ungewollt ändern. Die Pipeline übernimmt diese Rolle bei jedem Push, ohne müde zu werden und ohne Ausnahmen für Freitagnachmittag. Diese Seite zeigt, welche Gates in welcher Reihenfolge sinnvoll sind und wie sie in GitHub Actions und GitLab CI aussehen.

Inhalt

Quality Gates mit NCA, schnelle Hilfe vom Experten

Bei uns entscheidet die Pipeline über jeden Livegang. Unsere Symfony und Sulu Plattform läuft durch PHPStan, Psalm, Rector und PHPUnit, die Oberfläche durch Cypress mit Cypress Cloud. Wir nutzen GitHub Actions und GitLab CI täglich und richten beide in Kundenprojekten ein. Roland Golla ist Cypress Ambassador und hat mit dem NCA TESTIFY Plugin einen Basistest für Websites gebaut, der mit einer Zeile in der Pipeline läuft.

Im PHP Consulting bauen wir eure Pipeline Schritt für Schritt auf. Beim PHP Refactoring sorgen die Gates dafür, dass jeder Umbau prüfbar bleibt. Für die Oberfläche begleiten wir euch im Bereich Cypress Testing. Die Werkzeuge stehen im Glossar zu PHPStan, PHPUnit und GrumPHP.

Lass uns sprechen
Finde das passende Angebot für dein Projekt
Anfrage-Konfiguration
Starten Sie Ihre Anfrage
Projektart
Infos
Nachricht

Eliminierung technischer Schulden mit PHPStan, Rector PHP und PHPUnit. Über 20 Jahre Praxiserfahrung in skalierbaren Backends.

CORE EXPERTISE

Gesetzliche Konformität & Inklusion. Optimierung von Performance und Conversion durch radikal nutzerzentriertes, universelles Design.

BFSG COMPLIANT

Skalierbare KI-Systeme mit echtem Code Ownership. CI/CD, Backup-Strategien und Infrastruktur, die mit deinem Team wächst.

ENTERPRISE READY

Warum Refactoring ohne Gates zum Glücksspiel wird

Refactoring heißt, Struktur zu ändern und Verhalten zu behalten. Ob das gelingt, weiß man nur, wenn etwas prüft. Ohne Pipeline hängt die Qualität davon ab, ob jemand daran denkt, lokal die Tests laufen zu lassen. Unter Zeitdruck passiert genau das nicht.

Quality Gates machen aus guten Absichten feste Regeln. Sie gelten für alle gleich, für den Senior Entwickler genauso wie für den Code, den ein KI Agent geschrieben hat. Und sie geben dem Team Mut. Wer weiß, dass die Pipeline Fehler sofort meldet, traut sich auch an alte Klassen, die seit Jahren niemand anfassen wollte.

Wichtig ist das Zusammenspiel. Kein einzelnes Werkzeug fängt alle Fehler. Statische Analyse findet Typfehler, Tests finden falsches Verhalten, E2E Tests finden kaputte Abläufe in der Oberfläche. Erst die Kombination ergibt ein Netz, durch das kaum noch etwas fällt.

Die richtige Reihenfolge der Gates

Gute Pipelines prüfen zuerst das Schnelle und Billige und erst danach das Langsame und Teure. Fällt die Syntaxprüfung nach Sekunden durch, muss niemand zehn Minuten auf E2E Tests warten. Die Tabelle zeigt die Reihenfolge, die wir in PHP Projekten einsetzen.

Quality Gates für PHP Projekte in der Pipeline

Gate Werkzeug Findet
1. Syntax und Stil PHP Parallel Lint, Easy Coding Standard Syntaxfehler und uneinheitlichen Code
2. Statische Analyse PHPStan mit Baseline, optional Psalm Typfehler, unbekannte Methoden, toten Code
3. Rector Trockenlauf rector mit dry run Code, der noch nicht modernisiert ist
4. Unit und Functional Tests PHPUnit mit Patch Coverage Falsches Verhalten in Logik und Controllern
5. E2E Tests Cypress mit Cypress Cloud Kaputte Abläufe in der Oberfläche

Quality Gates in GitHub Actions

In GitHub Actions legt ihr die Gates als Schritte in einem Workflow an. Jeder Schritt, der fehlschlägt, stoppt den Lauf. Mit einer Branch Protection Regel blockiert der rote Lauf den Merge des Pull Requests.

Code:
          

name: quality-gates

on: [push, pull_request]

jobs:
  php:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - uses: shivammathur/setup-php@v2
        with:
          php-version: '8.4'
          coverage: pcov
      - run: composer install --no-progress
      - run: vendor/bin/parallel-lint src tests
      - run: vendor/bin/ecs check
      - run: vendor/bin/phpstan analyse --no-progress --error-format=github
      - run: vendor/bin/rector --dry-run
      - run: vendor/bin/phpunit --coverage-clover coverage.xml

Die Cypress Tests laufen am besten in einem eigenen Job, der erst startet, wenn die schnellen Gates grün sind. Mit Cypress Cloud seht ihr Videos, Screenshots und instabile Tests über viele Läufe hinweg.

Code:
          

npx cypress run --record --key $CYPRESS_RECORD_KEY

Quality Gates in GitLab CI

In GitLab CI ordnet ihr die Gates in Stages. Alle Jobs einer Stage laufen parallel, die nächste Stage startet erst, wenn die vorige grün ist. So bekommt ihr schnelles Feedback und spart Rechenzeit.

Code:
          

stages:
  - analyse
  - test

default:
  image: php:8.4
  before_script:
    - composer install --no-progress

phpstan:
  stage: analyse
  script:
    - vendor/bin/phpstan analyse --no-progress --error-format=gitlab > phpstan.json
  artifacts:
    reports:
      codequality: phpstan.json

rector:
  stage: analyse
  script:
    - vendor/bin/rector --dry-run

phpunit:
  stage: test
  script:
    - vendor/bin/phpunit

Das GitLab Format von PHPStan schreibt einen Code Quality Report. Die Meldungen erscheinen dadurch direkt im Merge Request. Im echten Projekt braucht das Image noch Composer und die passenden PHP Erweiterungen, die ihr am besten in einem eigenen Docker Image vorbereitet.

Lokal prüfen und Coverage richtig messen

Die Pipeline ist die letzte Schranke, nicht die erste. Schneller ist es, wenn Fehler gar nicht erst gepusht werden. GrumPHP hängt sich als Git Hook vor jeden Commit und führt die schnellen Prüfungen lokal aus. Die langsamen Tests bleiben in der Pipeline.

Bei Legacy Projekten ist die Gesamtabdeckung oft niedrig und lässt sich nicht über Nacht heben. Eine feste Grenze für die Gesamtabdeckung würde jeden Merge blockieren. Besser ist Patch Coverage: Sie misst nur, ob die neuen und geänderten Zeilen durch Tests abgedeckt sind. So wird jeder Pull Request ein Stück besser, ohne dass das Team an den Altlasten scheitert.

Wer wissen will, ob die Tests auch wirklich etwas prüfen, ergänzt Mutation Testing mit Infection. Es verändert den Code gezielt und schaut, ob die Tests das bemerken. Weil es langsam ist, läuft es meist nachts oder nur für geänderte Dateien.

Warum KI Code die Gates noch dringender braucht

KI Coding Agents erzeugen Code schneller, als ein Mensch ihn lesen kann. Das ist ihre Stärke und gleichzeitig das Risiko. Ein Agent kann Logik beim Umbauen vereinfachen, Typen aufweichen oder Fehlermeldungen mit Ignore Kommentaren zum Schweigen bringen. Im Diff fällt das zwischen hundert Zeilen kaum auf.

Die Pipeline schaut sich jede Zeile an, egal wer sie geschrieben hat. Deshalb gilt bei uns die Reihenfolge: erst Quality Gates, dann KI im Alltag. Ohne grüne Pipeline gibt es keinen Agenten im Repository. Mit ihr wird KI zu einem echten Beschleuniger, weil jede Änderung sofort gegen Tests und statische Analyse läuft.

Ein zusätzliches Gate lohnt sich für KI Code besonders: eine Regel, die neue Ignore Kommentare und Einträge in der Baseline meldet. So fällt sofort auf, wenn ein Fehler versteckt statt behoben wurde. Mehr dazu beschreiben wir im Vibe Coding Consulting und beim AI Code Refactoring.

No single technique is sufficient.

Sebastian Bergmann, Erfinder von PHPUnit und Mitgründer von thePHP.cc – Everything we have

Die NCA Erfahrung mit Pipelines

Wir bauen Pipelines für PHP Projekte seit vielen Jahren und betreiben sie für unsere eigene Plattform täglich. Die Bausteine findet ihr im Glossar.

Syntax prüft PHP Parallel Lint, den Stil Easy Coding Standard und der PHP Codesniffer. Statische Analyse läuft mit PHPStan und Psalm, Architekturregeln mit Deptrac. Modernisierung prüft Rector PHP im Trockenlauf. Tests laufen mit PHPUnit, parallel mit Paratest, gemessen über Patch Coverage und hinterfragt durch das Infection Framework. Testberichte macht otr-report lesbar. Lokal fängt GrumPHP Fehler vor dem Commit ab, Sicherheitslücken in Abhängigkeiten meldet Composer Audit. Ausgeliefert wird mit dem PHP Deployer.

CYPRESS.IO Ambassador und IT Consultant für QA Engenieering und Qualität in PHP Projekten.

Erreichen Sie unsere PHP Consultant Spezialisten

Wir sind Experten für PHP und helfen Ihnen, Ihre digitalen Herausforderungen zu meistern. Unser erfahrenes Team unterstützt Sie bei PHP Updates, PHP Refactoring und berät Sie remote zu allen Fragen rund um PHP. Mit unseren vollautomatischen CI/CD Deployments und einer robusten Docker-Infrastruktur bringen wir Ihre PHP-Projekte auf das nächste Level. Vertrauen Sie auf unsere Expertise für zuverlässige und skalierbare PHP-Lösungen.

Häufige Fragen zu PHP Quality Gates

Was Teams beim Aufbau einer Pipeline für PHP Projekte am häufigsten fragen.

Welche Quality Gates braucht ein PHP Projekt 2026 mindestens?

Statische Analyse mit PHPStan und PHPUnit Tests für die wichtigsten Abläufe. Beides sollte bei jedem Pull Request laufen und den Merge blockieren, wenn es rot ist. Danach lohnen sich ein Rector Trockenlauf, Patch Coverage und E2E Tests mit Cypress für die kritischen Wege durch die Oberfläche.

GitHub Actions oder GitLab CI, was passt 2026 besser?

Beide eignen sich gut für PHP Quality Gates. Entscheidend ist, wo euer Code liegt. GitHub Actions punktet mit vielen fertigen Actions, GitLab CI mit Stages, Code Quality Reports und guter Eignung für selbst betriebene Instanzen. Die Gates selbst sind in beiden Systemen dieselben Befehle.

In welcher Reihenfolge laufen Quality Gates 2026 am besten?

Vom Schnellen zum Langsamen. Zuerst Syntax und Code Stil, dann statische Analyse und Rector Trockenlauf, danach Unit und Functional Tests, zum Schluss E2E Tests. So scheitert ein Fehler früh und billig, und niemand wartet auf lange Testläufe für Code, der ohnehin nicht durchkommt.

Wie gehe ich 2026 mit Legacy Code ohne Tests in der Pipeline um?

Mit Baseline und Patch Coverage. Die PHPStan Baseline friert alte Fehler ein, Patch Coverage prüft nur neue und geänderte Zeilen. So wird die Pipeline sofort grün und jeder Pull Request macht den Code etwas besser. Kritische Bereiche sichert ihr zusätzlich mit Characterization Tests ab.

Brauchen KI generierte Änderungen 2026 eigene Gates?

Sie brauchen dieselben Gates, nur konsequenter. Ein zusätzlicher Check auf neue Ignore Kommentare und wachsende Baseline Einträge lohnt sich, weil Agents Fehler gern verstecken statt beheben. Ohne grüne Pipeline sollte kein Coding Agent im Repository arbeiten.

Warum läuft Rector als Trockenlauf in der Pipeline?

Der Trockenlauf meldet Code, der noch nicht den vereinbarten Regeln entspricht, ohne etwas zu ändern. Fällt er rot aus, hat jemand Code eingecheckt, den Rector umbauen würde. So bleibt der Modernisierungsstand stabil und alte Muster schleichen sich nicht wieder ein.

Was ist Patch Coverage?

Patch Coverage misst, wie viele der neuen oder geänderten Zeilen eines Pull Requests durch Tests abgedeckt sind. Anders als die Gesamtabdeckung ist sie auch in Legacy Projekten erreichbar. Jede Änderung muss getestet sein, ohne dass das Team vorher den ganzen Altbestand testen muss.

Gehören Cypress Tests in jeden Pull Request?

Die wichtigsten schon. Login, Checkout oder zentrale Formulare sollten bei jedem Pull Request laufen. Lange Suiten lassen sich parallelisieren oder nachts komplett ausführen. Cypress Cloud zeigt Videos, Screenshots und instabile Tests, damit Fehler schnell nachvollziehbar sind.

Wie lange darf eine Pipeline dauern?

Die schnellen Gates sollten in wenigen Minuten durch sein, damit Entwickler im Fluss bleiben. Als Richtwert gilt oft eine Grenze von etwa zehn Minuten für den Hauptlauf. Langsame Prüfungen wie Mutation Testing oder vollständige E2E Suiten laufen in eigenen Jobs oder nachts.

Was bringt GrumPHP zusätzlich zur Pipeline?

GrumPHP prüft vor jedem Commit lokal und fängt Fehler ab, bevor sie gepusht werden. Das spart Pipeline Läufe und Wartezeit. Die Pipeline bleibt trotzdem nötig, weil sich lokale Hooks umgehen lassen und weil dort auch die langsamen Tests laufen.

Wie führe ich Quality Gates ein, ohne das Team zu blockieren?

Schrittweise. Zuerst die Gates, die sofort grün sind, dann mit Baseline und Patch Coverage die strengeren. Jedes neue Gate wird vorher im Team besprochen. So entsteht Vertrauen in die Pipeline, und niemand empfindet sie als Hindernis.

Wie unterstützt Never Code Alone beim Aufbau der Pipeline?

Wir richten die Gates direkt in eurem Repository ein, in GitHub Actions oder GitLab CI, und bringen dem Team bei, damit zu arbeiten. Am Anfang steht ein kostenloses Kennenlernen. Danach schätzen wir den Aufwand und rechnen transparent nach Minuten ab, ohne Pakete und ohne Mindestlaufzeit.