News anzeigen (29)   News-Kategorien anzeigen



phpstan in Bitbucket Pipeline integrieren


Banner Tipps & Tricks
 
Ein statischer Code Analyzer hilft viele Probleme zu erkennen bevor sie eure Applikation abschießen.
 
Wir nutzen für unsere PHP Projekte phpstan und schaffen es so in die Pipeline zu integrieren, dass ein Push nur dann deployt wird wenn die Analyse erfolgreich ist.
 
Damit das funktioniert müsst ihr zunächst phpstan selbst für eure PHP Applikation konfigurieren. Wir gehen mal davon aus dass ihr composer verwendet, darüber könnt ihr das ganz einfach als dev-dependency hinzufügen:
 
composer require --dev phpstan/phpstan
Dann müsst ihr euch noch eine config anlegen, um zumindest die vendor files auszuschließen. Dafür legt ihr in eurem root Verzeichnis eine phpstan.neon an und füllt sie z.B. hiermit:
 
parameters:
    excludes_analyse:
        - *vendor/*
Ihr könnt nun schon mal testen ob euer Code sauber ist, indem ihr folgenden Befehl aus eurem root Verzeichnis aufruft (vorausgesetzt euer vendor Ordner liegt auch dort).
 
vendor/bin/phpstan analyse -l 0 -c .\phpstan.neon . --memory-limit=1G
Mal kurz zu den einzelnen Parametern:
 
-l 0
Hiermit wird das strictness level gesetzt, also wie streng das Regelset ist, nachdem phpstan prüft. 0 ist hierbei "am wenigsten streng".
 
-c .\phpstan.neon
Über dieses flag sagt ihr phpstan wo die config liegt. 
 
.
In welchem Ordner soll phpstan anfangen?
 
--memory-limit=1G
Wenn eure Codebase größer wird kann es sein dass ihr phpstan mehr Arbeitsspeicher zusichern müsst, das könnt ihr über dieses Flag tun.
 
Wenn das alles so funktioniert können wir uns an die Bitbucket Pipeline machen:
 
Dazu legt ihr einfach eine bitbucket-pipelines.yml Datei in eurem root folder an und füllt sie mit folgendem Inhalt:
 
image: php:7.2-cli

pipelines:
  branches:
    dev:                                             // Auf welchem Branch soll die Pipeline laufen?
    - step:                                          // Der erste Step ist das Aufrufen von phpstan
        name: Run PHP analyzer                     
        caches:                                      // Das ist ein Standard Cache von Bitbucket der eure composer module zwischenspeichert
          - composer                                 // Sie müssen dann nicht bei jedem Pipeline-Durchlauf neu geladen werden
        script:
          - apt-get update -yqq
          - apt-get install -y wget git zip unzip    // Wir brauchen git und unzip für die composer installs
          - docker-php-ext-install pdo_mysql         // Wenn ihr MySQL nutzt braucht ihr wahrscheinlich auch diese php extension,
                                                     // da phpstan sonst nicht die MySQL Konstanten etc. findet.
          - curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer
                                                     // Composer selbst muss natürlich auch installiert werden.
          - cd ./application/                        // Je nach Framework ... in unserem Fall ZF3
          - composer install                         // Einmal Dependencies installieren 
          - vendor/bin/phpstan analyse -l 0 -c phpstan.neon . --memory-limit=1G
                                                     // Zu guter Letzt der entscheidende Aufruf
    - step:
      ... // Hier würde dann euer Deployment auf die DEV / TEST / whatever Umgebung kommen
Falls phpstan also etwas zu meckern hat wird er einen non-zero exit code zurückgeben und Bitbucket bricht die Pipeline ab.
 
Derjenige der den bösen Push gemacht hat bekommt sogar eine Mail und darf seine Fehler schnell beheben bevor es jemand merkt.
 
Testen könnt ihr das Ganze dann in dem ihr einfach mal syntaktisch falschen Code auf den branch pusht für die ihr die Pipeline konfiguriert habt und bei Bitbucket auf die Pipelines Übersicht geht.
 
Von dort kommt ihr auf die einzelnen Pipeline Jobs und könnt durch einen Klick auf einen einzelnen Job das Log sehen.
 

Beispiel Pipeline

Lisa Schulz
Lisa Schulz
vom 09.12.19 um 16:53

Hallo, mein Name ist Lisa. Ich betreue das EXWE Backoffice und bin für unsere Social-Media Kanäle zuständig. All unsere Artikel sollen dir das Leben erleichtern und eine Entscheidungshilfe sein. Trotzdem kann es mal vorkommen, dass etwas unklar bleibt, daher: Wenn du Fragen zu diesem Artikel hast erreichst du mich ganz einfach unter +49 231 93149827




Schreibe EXWE auf WhatsApp