Come creare una pipeline CI GitLab per analizzare staticamente i progetti PHP

L'esecuzione dell'analisi statica sul codice consente di risparmiare tempo scoprendo problemi nascosti. PHPStan è uno strumento di analisi statica per PHP che ti aiuta ad aumentare la qualità della tua base di codice. Ecco come eseguire PHPStan all'interno delle tue pipeline GitLab CI.
È utile eseguire regolarmente PHPStan mentre crei nuove funzionalità. Usarlo localmente ti porta solo così lontano però. Fai affidamento sul fatto che gli altri membri del tuo team siano disciplinati quanto te. L'integrazione dell'analisi statica in un flusso di lavoro CI/CD garantisce che il codice non possa essere unito se interromperebbe il ramo principale del progetto.
Ottenere la configurazione con PHPStan
Devi prima aggiungere PHPStan al tuo progetto. Abbiamo già una guida dettagliata sull'installazione e la configurazione di PHPStan, quindi tratteremo solo le basi qui.
Innanzitutto, usa Composer per installare PHPStan:
composer require --dev phpstan/phpstan
Successivamente, crea un file di configurazione di base phpstan.neon
nel tuo progetto:
class="co4">parameters:class="co3">
levelclass="sy2">: maxclass="co4">
pathsclass="sy2">:
- src
- testsclass="co3">
tmpDirclass="sy2">: .tmp
La directory temporanea viene sovrascritta per assistere la memorizzazione nella cache di GitLab CI, configurazione di seguito.
Ora puoi eseguire PHPStan localmente per verificare che la tua configurazione funzioni:
vendor/bin/phpstan analyse
In questa fase, non importa se i test vengono superati.
Configurazione di GitLab per CI
Assicurati di aver inviato il tuo codice a un progetto sul tuo server GitLab. Dovrai verificare che la funzione Pipelines sia abilitata per il tuo progetto: se vedi CI/CD nella barra laterale sinistra, sei a posto.

Per abilitare il sistema CI del tuo progetto, fai clic sul pulsante Impostazioni nella barra laterale. Espandi la sezione Visibilità, caratteristiche del progetto, autorizzazioni e abilita la funzione Pipelines.

Se utilizzi le Merge Request (MR) di GitLab in modo disciplinato, ora puoi configurare GitLab per impedire che le MR vengano unite a meno che non abbiano una pipeline corretta. Espandi la sezione delle impostazioni Unisci richieste e seleziona il pulsante di attivazione Le pipeline devono riuscire. Fare clic su Salva per confermare. Questo ti impedirà di unire accidentalmente un MR quando PHPStan fallisce contro le sue modifiche.

Per utilizzare GitLab CI, devi avere un GitLab Runner definito a livello di istanza, gruppo o progetto. I corridori sono responsabili dell'esecuzione dei lavori CI creati dal sistema GitLab.
Utilizzeremo l'immagine PHPStan Docker per eseguire PHPStan nella nostra pipeline CI. Ciò richiede l'uso di un GitLab Runner che utilizza l'esecutore Docker. Se ti trovi su un'istanza autogestita e devi configurare un nuovo Runner, segui le indicazioni nel nostro articolo sulla configurazione di GitLab CI.
Creazione di una pipeline CI GitLab
GitLab CI è configurato utilizzando un file .gitlab-ci.yml
nella root del tuo progetto. Le pipeline CI supportano più fasi sequenziali. I lavori di ogni fase vengono eseguiti in parallelo. Per i nostri scopi di esecuzione di PHPStan, abbiamo bisogno di una singola fase che esegua un lavoro.
class="co4">stagesclass="sy2">:
- phpstan
class="co4">
cache:class="co3">
keyclass="sy2">: $CI_COMMIT_REF_SLUGclass="co4">
pathsclass="sy2">:
- .tmp/
- vendor/
class="co4">
phpstan:class="co3">
stageclass="sy2">: phpstanclass="co3">
imageclass="sy2">: ghcr.io/phpstan/phpstanclass="co4">
scriptclass="sy2">:
- analyse --no-progress --error-format gitlab > phpstan.jsonclass="co4">
artifacts:class="co3">
whenclass="sy2">: alwaysclass="co4">
reports:class="co3">
codequalityclass="sy2">: phpstan.json
Questo file GitLab CI contiene tutto ciò di cui abbiamo bisogno per eseguire PHPStan all'interno della nostra pipeline. Definiamo uno stage, phpstan
, contenente un lavoro chiamato anche phpstan
. Il lavoro utilizza l'immagine Docker PHPStan ufficiale dal registro del contenitore GitHub.
La cache GitLab CI è configurata per memorizzare nella cache le directory .tmp
e vendor
. Ciò migliorerà le prestazioni delle esecuzioni successive sullo stesso ramo. La cache verrà ripristinata automaticamente. Tornando al nostro phpstan.neon
, abbiamo impostato tmpDir
su .tmp
per questo motivo: significa che ora possiamo farvi riferimento con sicurezza nell'elemento della configurazione configurazione della cache della pipeline.
Inoltre, memorizziamo nella cache vendor
per evitare di reinstallare inutilmente le dipendenze di Composer a ogni esecuzione. Tieni presente che non è necessario eseguire composer install
manualmente: l'immagine ufficiale di PHPStan Docker lo richiama automaticamente.
Il flag --error-format
viene passato al comando analyse
di PHPStan. Questo configura PHPStan per creare un file JSON nel formato accettato dal report sulla qualità del codice di GitLab. Giù nella sezione artifacts
, questo file viene caricato su GitLab dopo il completamento del lavoro.
Utilizzo della pipeline
Esegui il commit del tuo .gitlab-ci.yml
e invia al tuo server GitLab. Il sistema CI dovrebbe ora avviarsi e creare la tua prima pipeline. Utilizzare il collegamento CI/CD nella barra di navigazione a sinistra per visualizzare l'avanzamento della pipeline.

Se ottieni un segno di spunta verde, i test di PHPStan sono stati superati! Il tuo ramo è in buono stato ed è pronto per essere unito. Se appare una croce rossa, hai altro lavoro da fare. PHPStan e GitLab CI ti hanno appena impedito di unire codice potenzialmente danneggiato.
È possibile ottenere l'elenco degli errori facendo clic sull'icona di download a destra della pipeline. Selezionare l'artefatto di qualità del codice PHPStan per ottenere il report JSON degli errori rilevati da PHPStan.
Utilizzo con richieste di unione
La lettura manuale del JSON non è un'ottima esperienza. Tuttavia, le richieste di unione di GitLab espongono automaticamente i contenuti del report. Poiché il report è contrassegnato come artefatto di qualità del codice GitLab, GitLab sa come presentare le informazioni all'interno.

Le richieste di unione con una pipeline in errore dovrebbero visualizzare una sezione espandibile Qualità del codice. Indica il numero di errori riscontrati. Espandi la sezione per visualizzare un elenco completo dei problemi rilevati da PHPStan.
Una volta risolti i problemi, invia le modifiche a GitLab. La pipeline verrà eseguita di nuovo. Una volta completato, vedrai il nuovo stato nella schermata Pipeline e nel widget della qualità del codice della tua richiesta di unione.
Conclusione
PHPStan ti aiuta a scrivere un PHP migliore che è meno suscettibile a problemi nascosti. Per ottenere il massimo da esso, lo strumento deve essere incorporato nel flusso di lavoro di sviluppo in modo tale da non poter essere ignorato o aggirato.
L'uso di PHPStan con GitLab CI ti offre la coerenza di cui hai bisogno per essere sicuro del tuo codice. La configurazione di GitLab per bloccare i MR con una pipeline non riuscita significa che le modifiche non possono entrare nel tuo ramo principale senza passare un'esecuzione PHPStan. Il supporto completo di PHPStan per i rapporti sulla qualità del codice di GitLab semplifica la valutazione degli errori senza uscire dall'interfaccia utente Web, aiutandoti a risolvere rapidamente eventuali problemi scoperti.
Articoli correlati:
- Linux で dd コマンドを使用してファイルベースのファイルシステムを作成する方法
- Linux で 1 つのコマンドで新しいサブディレクトリを作成する方法
- Linux でスナップショットを作成する方法
- PHPFOX スクリプトを使用して独自の Facebook クローン ネットワーキング サイトを作成する方法
- Plogger を使用して独自のオンライン フォト ギャラリー アルバムを作成する
- Gentoo Linuxで仮想ホストを作成し、SSL証明書とキーを生成し、CGIゲートウェイを有効にする
- RHEL/CentOS/Fedora 上で iSCSI ターゲットを使用して一元化されたセキュア ストレージを作成する パート -I
- Gtkdialog - Linux でシェル スクリプトを使用してグラフィカル (GTK+) インターフェイスとダイアログ ボックスを作成する
- RHEL/CentOS/Fedora 上の「iSCSI ターゲット サーバー」で LVM を使用して LUN を作成およびセットアップする方法 - パート II
- Linux で「mdadm」ツールを使用して「2 つのデバイス」にソフトウェア RAID0 (ストライプ) を作成する - パート 2
- Linux で「2 つのディスク」を使用した RAID 1 (ミラーリング) のセットアップ - パート 3
- Linux での RAID レベル 6 (二重分散パリティによるストライピング) のセットアップ - パート 5
- Linux での RAID 5 (分散パリティを使用したストライピング) の作成 - パート 4
- Linux での RAID 10 または 1+0 (ネスト) のセットアップ - パート 6
- Linux で PyGobject ツールを使用して高度な GUI アプリケーションを作成する - パート 2