phpstan in Bitbucket Pipeline integrieren

09.12.2019
von Meike Müller
Tipps & Tricks
Banner
Mit diesem kurzen Artikel möchten wir dir hilfreiche Tipps im Bereich Webentwicklung geben. Hast du weitere Fragen, oder benötigst du mehr Informationen über individuelle & responsive Webentwicklung, dann kontaktiere uns gerne. Wir stehen dir bei allen Herausforderungen zur Seite und nun unser Tipp in Bezug auf den PHP Code Analyzer:

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

Du benötigst für dein Unternehmen weitere Hilfe im Bereich Webentwicklung? Unsere Webentwickler stehen dir gerne zur Seite und beantworten deine Fragen - kontaktiere uns gerne! 

Was ist dein Projekt? Wenn du uns darüber erzählen möchtest, rufen wir dich zurück!

 
Meike
Meike
vom 09.12.2019

Hallo, mein Name ist Meike. 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

Du möchtest immer am Zenit der Technik bleiben? Keine News und Blogbeiträge mehr verpassen.
Zu diesem Thema haben wir außerdem noch folgende interessante Beiträge aus unserem Tech-Blog für dich
So verbindest du deinen Einzelhandel mit dem Onlinehandel!

E-Commerce-Lösungen für dein Ladenlokal - wie du mit Hilfe von Pickware und JTL deine Warenwirtschaft professionalisierst

Wie kann ich den besten Software-Dienstleister für uns finden?

Du benötigst Unterstützung im Bereich Software Entwicklung und suchst den geeigneten Softwaredienstleister? Finde hier die wichtigsten Kriterien.

E-Mails abschaffen! Tools für effektiveren Kunden-Support

Projektmanagement-Tools die dir das Leben vereinfachen und warum die E-Mail und Ticketsysteme als Kommunikationskanal zu Problemen führen.