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
    Continuously Deploying WordPress
    Giuseppe Mazzapica

    View Slide

  2. 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

    View Slide

  3. 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.

    View Slide

  4. 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.

    View Slide

  5. 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

    View Slide

  6. 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

    View Slide

  7. 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.

    View Slide

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

    View Slide

  9. 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

    View Slide

  10. 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

    View Slide

  11. 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

    View Slide

  12. 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

    View Slide

  13. 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

    View Slide

  14. 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

    View Slide

  15. 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

    View Slide

  16. 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

    View Slide

  17. 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

    View Slide

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

    View Slide

  19. 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

    View Slide

  20. 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

    View Slide

  21. 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.

    View Slide

  22. 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.

    View Slide

  23. Continuously Deploying WordPress
    ma... WordPress?

    View Slide

  24. 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?

    View Slide

  25. 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

    View Slide

  26. 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

    View Slide

  27. 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)

    View Slide

  28. 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.

    View Slide

  29. 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

    View Slide

  30. 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.

    View Slide

  31. 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.

    View Slide

  32. 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.

    View Slide

  33. 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

    View Slide

  34. 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.

    View Slide

  35. Continuously Deploying WordPress
    Domande?

    View Slide