Slide 1

Slide 1 text

Continuously Deploying WordPress Continuously Deploying WordPress Giuseppe Mazzapica

Slide 2

Slide 2 text

Continuously Deploying WordPress La più grande agenzia WordPress tedesca WordPress.com 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

Slide 3

Slide 3 text

Continuously Deploying WordPress Cos’è il ? Continuous Deployment Un insieme di pratiche per automatizzare il processo che porta dalla scrittura di codice al suo rilascio in produzione. Premessa del continuous deployment è la continuous integration.

Slide 4

Slide 4 text

Continuously Deploying WordPress Continuous deployment e continuous delivery condividono l’insieme 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.

Slide 5

Slide 5 text

Continuously Deploying WordPress Concetti chiave Continuous Integration Continuous Delivery Continuous 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

Slide 6

Slide 6 text

Continuously Deploying WordPress Continuous Development Source Code Code Review Tests 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

Slide 7

Slide 7 text

Continuously Deploying WordPress Continuous Integration Tutto il codice custom risiede 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.

Slide 8

Slide 8 text

Continuously Deploying WordPress Version Control: Tools Mercurial Perforce Git Subversion git-scm.com subversion.apache.org mercurial-scm.org perforce.com

Slide 9

Slide 9 text

Continuously Deploying WordPress Continuous Integration: Tools Hudson Circle CI Bitbucket Pipelines Jenkins Travis CI jenkins.io travis-ci.org hudson-ci.org circleci.com bitbucket.org Gitlab CI about.gitlab.com/gitlab-ci

Slide 10

Slide 10 text

Continuously Deploying WordPress Code Review: Tools Gerrit GitHub Gitlab Phabricator Codacy Crucible codacy.com atlassian.com/software/crucible gerritcodereview.com github.com gitlab.com phacility.com/phabricator

Slide 11

Slide 11 text

Continuously Deploying WordPress Testing: Tools JavaScript Jest Codeception Behat Atoum PHPUnit phpspec PHP phpunit.de phpspec.net codeception.com behat.org Mocha mochajs.org Jasmine jasmine.github.io Cucumber.js cucumber.io atoum.org facebook.github.io/jest Tapegithub.com/substack/tape

Slide 12

Slide 12 text

Continuously Deploying WordPress Continuous Delivery & Deployment Il ciclo di 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

Slide 13

Slide 13 text

Continuously Deploying WordPress Continuous Delivery & Deployment Quando il ciclo 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

Slide 14

Slide 14 text

Continuously Deploying WordPress Concetti Chiave Automazione Scalabilità, Riproducibilità, Mantenibilità Controllo 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

Slide 15

Slide 15 text

Continuously Deploying WordPress nuove funzioni bugfix miglioramenti verifiche di qualità 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

Slide 16

Slide 16 text

Continuously Deploying WordPress Configuration Management: Tools Puppet Chef SaltStack Ansible Dockerdocker.com ansible.com puppet.com chef.io saltstack.com CFEnginecfengine.com Forge forge.laravel.com Servizi Vagrant vagrantup.com Altro Digital Oceandigitalocean.com VPS Hosting + API Linode linode.com AWS aws.amazon.com

Slide 17

Slide 17 text

Continuously Deploying WordPress Code Deployment: Tools Envoy BLDR Robo Fabric Deployer Capistranocapistranorb.com deployer.org laravel.com/docs/envoy robo.li fabfile.org bldr.io

Slide 18

Slide 18 text

Continuously Deploying WordPress Code Deployment: Servizi Envoyer envoyer.io AWS CodeDeploy aws.amazon.com/codedeploy DeployHQ Deploybot Codeship deployhq.com deploybot.com codeship.com

Slide 19

Slide 19 text

Continuously Deploying WordPress Debugging, Profiling: Tools Blackfire Z-Ray Tideways Valgrind XDebug xdebug.org valgrind.org blackfire.io zend.com/en/products/server/z-ray tideways.io

Slide 20

Slide 20 text

Continuously Deploying WordPress Greylog Cube NewRelic Rollbar Monolog Loggly Logging, Monitoring Tools Logstash Dynatrace DataDog Logmatic Sentry Grafana elastic.co graylog.org square.github.io/cube loggly.com rollbar.com bit.ly/mono-log newrelic.com dynatrace.com datadoghq.com logmatic.io grafana.com sentry.io

Slide 21

Slide 21 text

Continuously Deploying WordPress Il continuous development non è un toolset, 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.

Slide 22

Slide 22 text

Continuously Deploying WordPress All’atto pratico, il continuous development è un’insieme 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.

Slide 23

Slide 23 text

Continuously Deploying WordPress ma... WordPress?

Slide 24

Slide 24 text

Continuously Deploying WordPress In ambito continuous development, WordPress non è 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?

Slide 25

Slide 25 text

Continuously Deploying WordPress Source Code Code Review Tests Unit, Integration 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

Slide 26

Slide 26 text

Continuously Deploying WordPress Code Review Tests Unit, Integration Version Control 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

Slide 27

Slide 27 text

Continuously Deploying WordPress Integrare WordPress in un contesto di continuous 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)

Slide 28

Slide 28 text

Continuously Deploying WordPress Il processo di continuous development ci impone 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.

Slide 29

Slide 29 text

Continuously Deploying WordPress I progetti “nel mondo reale” hanno spesso 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

Slide 30

Slide 30 text

Continuously Deploying WordPress WordPress richiede una configurazione basata su files 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.

Slide 31

Slide 31 text

Continuously Deploying WordPress WP Starter wecodemore.github.io/wpstarter e roots.io/bedrock Bedrock sono due librerie che facilitano l’integrazione di Composer con WordPress permettendone la configurazione tramite variabili di ambiente.

Slide 32

Slide 32 text

Continuously Deploying WordPress Utilizzare WordPress in congiunzione con Composer e 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.

Slide 33

Slide 33 text

Continuously Deploying WordPress L’ultimo importante “tassello” ancora mancante è anche 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

Slide 34

Slide 34 text

Continuously Deploying WordPress Integrato con Composer, variabili di ambiente, WP 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.

Slide 35

Slide 35 text

Continuously Deploying WordPress Domande?