Cosa sono "Continuous Deploying", "Continuous Delivery" e "Continuous Integration"? È possibile integrare
WordPress in un processo di continuous development? E come?
Featured Service Partner Gold Certified WooCommerce Expert @gmazzap github.com/gmazzap https://gmazzap.me Sviluppatore PHP dal 2005, primo incontro con WordPress nel 2006. Moderatore presso wordpress.stackexchange.com Dal 2016 WordPress Engineer per: Giuseppe Mazzapica Continuously Deploying WordPress
di pratiche per automatizzare il processo che porta dalla scrittura di codice al suo rilascio in produzione. Premessa del continuous deployment è la continuous integration.
delle pratiche e degli strumenti, ma il continuous deployment implica il passaggio automatizzato dal ciclo di sviluppo al ciclo di rilascio, tale passaggio non è automatizzato nella continuous delivery.
Deployment Ciclo di Sviluppo Ciclo di Rilascio “You’re doing continuous delivery when: Your software is deployable throughout its lifecycle Your team prioritizes keeping the software deployable over working on new features Anybody can get fast, automated feedback on the production readiness of their systems any time somebody makes a change to them You can perform push-button deployments of any version of the software to any environment on demand Martin Fowler
Unit, Integration Version Control Build Continuous Integration Continuous Delivery Continuous Deployment Code Deployment Tests Platform Tests Acceptance Maintenance Monitoring to Stage Environment to Production Environment Environment Configuration Stage, Production Ciclo di Rilascio Ciclo di Sviluppo
sotto controllo di versione. Il team di sviluppo clona, modifica e aggiorna la repository centrale in maniera frequente. Ad ogni aggiornamento della repository, vengono lanciati automaticamente unit test e il team QA viene notificato per la revisione del codice.
sviluppo è gestito in continuous integration Alla fine del ciclo di sviluppo il codice viene rilasciato automaticamente in ambiente production-like (stage), e nuovi test vengono eseguiti in automatico La configurazione di tutti i server è sotto controllo di versione, automatizzata, riproducibile e consente la gestione di diversi ambienti
di rilascio in ambiente stage termina con successo (gli acceptance e user acceptance test passano con successo) il codice è rilasciato in produzione con un ciclo identico a quello eseguito in ambiente stage. Il rilascio in produzione può essere: automatizzato, si parla di continuous deployment push-the-button, si parla di continuous delivery
di qualità Ogni passaggio ha i suoi test automatici Se i test ad uno step falliscono, il ciclo si interrompe Più siamo vicini all’ambiente di produzione più i test sono “black box” Dev/Prod parity Tutti gli ambienti condividono identiche tecnologie Il codice è indipendente dall’ambiente Monitoraggio continuo
valutazioni di convenienza valutazioni di usabilità monitoraggio performance monitoraggio errori analisi dei feedback Sviluppo e g a t S / t s e T quality assurance feature management feature planning Il continuous development, garantendo un codice “environment agnostic”, permette di avere focus diversificati in ogni ambiente, senza preoccupazioni riguardo l’esistenza di problemi legati all’ambiente specifico g n i r o t i n o m
ma più un mindset che ha l’obiettivo di integrare varie competenze per portare alla condivisione di scelte e responsabilità. Il codice non è un elemento a sé stante, ma è parte di un processo integrato e in continuo divenire il cui motore è la ricerca del massimo valore di business.
di pratiche prima che di strumenti. È un processo modulare che può essere adattato a esigenze diverse, e può essere integrato in step graduali all’interno di diversi processi esistenti.
che un altro tool. Nello speficifico, è un tool per la scrittura del codice di un’applicazione o sito web. Bisogna dunque chiedersi: è possibile integrare WordPress in un processo di continuous development? E se sì, come?
Version Control Build Code Deployment Tests Platform Tests Acceptance Maintenance Monitoring to Stage Environment to Production Environment Environment Configuration Stage, Production Ciclo di Rilascio Ciclo di Sviluppo Continuous Development Continuous Integration Continuous Delivery Continuous Deployment
Build Code Deployment Tests Platform Tests Acceptance Maintenance Monitoring to Stage Environment Environment Configuration Stage, Production Ciclo di Rilascio Ciclo di Sviluppo Source Code Continuous Development WordPress Core Tema Custom Plugin Custom Plugin di terze parti Continuous Integration Continuous Delivery Continuous Deployment
development non influisce in alcun modo nel processo, bisogna solo tenere presente che il codice con cui si ha a che il codice sarà composto da diversi elementi: WordPress core Codice di terze parti (temi, plugin) Codice custom (temi plugin)
di tenere il codice sotto controllo di versione, ma anche di automatizzare ogni step del ciclo di sviluppo. La soluzione più efficace consiste nel gestire tramite controllo di versione il codice custom e nel trattare il codice di terze parti (incluso WordPress) come una dipendenza.
un albero delle dipendenze complesso, impossibile da gestire senza un strumento di dependency management In PHP, e dunque anche WordPress, l’unica (ad oggi) soluzione percorribile è Composer getcomposer.org
PHP, un ostacolo al codice “environment agnostic”. Diversi progetti che integrano WordPress con Composer prevedono anche una gestione di environment diversi ma in un’ ottica di cross-environment parity i diversi ambienti dovrebbero essere configurati tramite variabili d’ambiente.
variabili d’ambiente permette di attuare le correnti best practices per il deployment di codice PHP, aprendo la strada all’utilizzo in ambito WordPress di strumenti pensati per “generiche” applicazioni PHP.
l’unico specifico di WordPress: WP CLI Permettendo da riga di comando di eseguire compiti specifici di WordPress (per esempio, creare utenti o attivare plugin) è un componente fondamentale per la completa automatizzazione del deployment. wp-cli.org
CLI e possibilmente con l’ausilio di librerie come Bedrock o WP Starter (per non reinventare la ruota), WordPress si pone alla stregua di qualsiasi altra applicazione, PHP o altrimenti, perfettamente integrabile in un processo di continuous development.