phpstan in Bitbucket Pipeline integrieren
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
-c .\phpstan.neon
.
--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.
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!
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
Steigere die Performance deines Onlineshops durch eine höhere Conversionrate! Nutze hierfür unsere Tipps und Tricks zum Thema UX und Usability Design
Tips and Tricks for Content Management System Joomla: Replace the regular Joomla dropdown with a nice Bootstrap dropdown including flags
Es sollte dringend verhindert werden Bildnamen bspw. als meine_werbung.jpg oder sonstigen Kürzeln in diese Richtung zu versehen.