Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Continuously Deploying WordPress (IT)

Continuously Deploying WordPress (IT)

Cosa sono "Continuous Deploying", "Continuous Delivery" e "Continuous Integration"? È possibile integrare
WordPress in un processo di continuous development? E come?

Giuseppe Mazzapica

April 08, 2017
Tweet

More Decks by Giuseppe Mazzapica

Other Decks in Programming

Transcript

  1. 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
  2. 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.
  3. 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.
  4. 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
  5. 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
  6. 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.
  7. Continuously Deploying WordPress Version Control: Tools Mercurial Perforce Git Subversion

    git-scm.com subversion.apache.org mercurial-scm.org perforce.com
  8. 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
  9. 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
  10. 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
  11. 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
  12. 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
  13. 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
  14. 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
  15. 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
  16. 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
  17. Continuously Deploying WordPress Code Deployment: Servizi Envoyer envoyer.io AWS CodeDeploy

    aws.amazon.com/codedeploy DeployHQ Deploybot Codeship deployhq.com deploybot.com codeship.com
  18. 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
  19. 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
  20. 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.
  21. 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.
  22. 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?
  23. 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
  24. 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
  25. 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)
  26. 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.
  27. 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
  28. 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.
  29. 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.
  30. 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.
  31. 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
  32. 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.