Strategie di deploy su Magento

In occasione dell’apertura del Magento Stack Exchange su http://magento.stackexchange.com/ ho posto la seguente domanda: “Qual è la vostra miglior strategia di deploy su Magento?”

La domanda e le relative risposte sono visibili al seguente indirizzo: http://magento.stackexchange.com/questions/252/what-is-the-best-deploy-strategy

Mi sono stati forniti ottimi spunti ma non la risposta che speravo: non esiste un tool o un best practice comunemente adottato per facilitare il deploy di soluzioni Magento. 

Allora, mi son detto, perché non svilupparlo?

Facciamo un passo indietro: cosa si intende in questo caso per deploy e perché è così importante avere un tool?

Sviluppare una soluzione Magento non significa soltanto scrivere codice. Significa anche lavorare all’interno dell’Admin Control Panel, configurare la piattaforma, creare entità come attributi, prodotti, categorie. Tutte queste attività vanno ripetute su ciascun ambiente su cui si  lavora: i vari ambienti dei singoli sviluppatori, l’eventuale ambiente di pre-staging, l’ambiente di staging e quello di produzione.

Naturalmente tutto quello che si può fare attraverso l’Admin Control Panel si può fare scrivendo codice e infatti diverse risposte alla mia domanda su Stack Exchange andavano in questa direzione: devi sviluppare il codice che crea le entità e modifica la configurazione di sistema e non farlo attraverso l’Admin Control Panel.

Abbiamo sviluppato in passato numerosi progetti con questa logica e sebbene sia l’unico modo (sino ad ora) per essere sicuri che tutto quello che serve sia replicato in maniera identica su tutti gli ambienti questo non evita la possibilità che uno sviluppatore modifichi una configurazione o crei una entità attraverso l’Admin Control Panel dimenticando di scrivere il codice che replica questa azione. Senza contare al tempo che richiede scrivere il codice che replica queste azioni e la possibilità di inserire bug in questo codice.

Perché non automatizzare tutto questo? In fondo basterebbe tracciare tutto ciò che accade nell’Admin Control Panel e, ove possibile, replicare queste azioni automaticamente. Se poi il tracciamento fosse condiviso attraverso gli stessi strumenti di source versioning abitualmente utilizzati per mantenere allineata la base di codice il gioco sarebbe fatto.

Da queste considerazioni nasce Mageploy, l’unica estensione (che io sappia almeno al momento) che consentitrà (il futuro è d’obbligo) di fare tutto questo.

Il prototipo o POC (Proof Of Concept) è già stato sviluppato. Al momento siamo in grado di replicare la creazione degli Attributi e degli Attribute Set. Questi ultimi sono complessi da gestire e non abbiamo ancora risolto tutte le relative problematiche. I prossimi passi saranno quelli di sviluppare la tracciatura automatica almeno per System Config e Categorie.

Il codice sarà ampiamente refattorizzato quindi sconsiglio di utilizzare già Mageploy però se volete seguirne l’evoluzione potete farlo attraverso il relativo repository GitHub: https://github.com/pug-more/mageploy

Speriamo di poter presentare l’estensione al PHP-Day 2013, abbiamo già sottoposto la candidatura.

This entry was posted in Strumenti and tagged , , . Bookmark the permalink.

One Response to Strategie di deploy su Magento

  1. Un aggiornamento per segnalare che il modulo ha preso ormai una direzione stabile a livello di formato quindi incoraggio chiunque voglia a provarlo.
    C’è ancora molto da lavorare ma il POC è completo e ci consente di presentarlo.
    Abbiamo cominciato a scrivere la documentazione ufficiale che dovrebbe servire anche a chi vuole contribuire a capire i concetti avanzati.
    In ultimo abbiamo anche un logo ufficiale, il che non guasta.

Leave a Reply

Your email address will not be published. Required fields are marked *

To create code blocks or other preformatted text, indent by four spaces:

    This will be displayed in a monospaced font. The first four 
    spaces will be stripped off, but all other whitespace
    will be preserved.
    
    Markdown is turned off in code blocks:
     [This is not a link](http://example.com)

To create not a block, but an inline code span, use backticks:

Here is some inline `code`.

For more help see http://daringfireball.net/projects/markdown/syntax