Il deploy di un'applicazione raramente lascia scampo alla generazione di errori frutto della disattenzione durante l’esecuzione di operazioni ripetitive. La
Continuous Integration (CI) è la risposta alla creazione di software di qualità nonostante i progressivi cambiamenti a cui sono soggette molte applicazioni web: il libro “
Integrating PHP Projects with Jenkins” ribadisce che la
CI deve essere applicata anche a progetti PHP.
Il suo autore,
Sebastian Bergmann, padre di
PHPUnit, speaker, consulente e formatore di altissimo livello, con la sua società
thePHP.cc, è attualmente attivo nella diffusione di PHP, non solo in ambito web, ma anche in ambito enterprise, e questo breve manuale ne è una prova.
Il testo, di poco più di 50 pagine, non è un manuale che pretende di spiegare le tecniche di
CI, ma assomiglia più a un
compendio molto ben organizzato
di esperienze accumulate dall’autore stesso durante i suoi anni di consulenza. Bergmann, infatti, dopo una breve introduzione sul lavoro della community che ha sviluppato le piattaforme per la
CI, ci conduce all’interessante scoperta degli strumenti e delle
best practices di questa tecnica all'interno dei progetti PHP.
Il
primo e il
secondo capitolo introducono il lettore al set-up di un ambiente adatto a ospitare una piattaforma di
CI. Il lettore può così prendere confidenza con
Ant, un tool per l'automatizzazione dei processi di generazione delle
build, l'esecuzione dei test e il deploy dell'applicazione, e impara a configurare il progetto di test per approfondire gli argomenti trattati nel libro. L'autore presta particolare attenzione all’installazione dei componenti del meta pacchetto
PHP Quality Assurance Toolchain e tutti i plug-in di
Jenkins che verranno approfonditi nei capitoli successivi. Tra questi:
Clover PHP,
Git,
Jdepend,
Pmd.
Si passa poi, nel
terzo capitolo, a illustrare all'utente come estendere un file di configurazione di
Ant per eseguire gli unit test durante l'operazione di build, come configurare un job su
Jenkins e quali sono le criticità.
Nel
quarto capitolo l’attenzione si sposta sulla
Continuous Inspection: viene illustrato come, attraverso questa pratica, è possibile tenere sempre sotto controllo la complessità del codice, verificare le violazioni degli standard ed evidenziare eventuali duplicati di codice. L'autore mostra poi come è possibile aggregare queste informazioni per renderle più leggibili e quali sono gli strumenti per eseguire questa operazione.
Il
quinto capitolo mostra due progetti molto importanti, sviluppati dallo stesso Bergmann: il
PHP Project wizard, un tool da linea di comando che permette di generare gli script e i file di configurazione necessari per l'automatizzazione di una
build in un progetto PHP; il secondo,
Template for a PHP project in Jenkins, fornisce un modello standard per integrare
Jenkins all’interno di progetti PHP.
Nel
sesto e ultimo capitolo, Bergmann offre al lettore alcuni spunti riguardanti il corretto utilizzo di un sistema di
versioning e dei diversi tipi di test (
unit test,
integration test,
performance test, ecc.). Questi strumenti permettono, una volta acquisita una totale sicurezza nei propri test, di considerare la possibilità di introdurre una strategia di
continuous deployment.
L’intento di Bergmann non è quello di fornire un manuale teorico sulla
CI, ma piuttosto di illustrarne l’adattamento pratico all’interno di un progetto PHP. Quindi, per chi fosse a digiuno di letture sulla
CI e per poter apprezzare e comprendere i contenuti, espressi in appena 50 pagine, sarà necessario affiancare la lettura di altri manuali teorici. L’utile
bibliografia presente al fondo del testo indica quali sono i titoli che hanno ispirato la scrittura del testo.

Il libro descrive tutti gli
strumenti necessari all’utilizzo della
CI durante lo sviluppo di applicazioni PHP. Un altro aspetto molto interessante è l’
approccio pratico adottato dall'autore, che rende il libro molto utile nel lavoro quotidiano.

I concetti non sono esposti in maniera esaustiva, ma solo accennati. Poco approfondita la parte su
Ant e i sistemi di
versioning.