{"id":229891,"date":"2022-11-06T18:07:00","date_gmt":"2022-11-06T15:07:00","guid":{"rendered":"https:\/\/wordpress.mediadoma.com\/?p=229891"},"modified":"2022-11-09T19:10:37","modified_gmt":"2022-11-09T16:10:37","slug":"guardrail-del-progetto-ambienti-di-fornitura","status":"publish","type":"post","link":"https:\/\/wordpress.mediadoma.com\/it\/guardrail-del-progetto-ambienti-di-fornitura\/","title":{"rendered":"Guardrail del progetto: ambienti di fornitura"},"content":{"rendered":"\n<p>Questa serie di brevi articoli \u00e8 composta da alcune cose che ho imparato negli ultimi anni eseguendo progetti basati nell&#8217;area in cui noi (supponendo che tu stia leggendo questo proveniente dalla mia stessa parte del settore \ud83d\ude42) opera.<\/p>\n<p>Se ti stai solo imbattendo in questo, la serie copre alcuni fattori <a href=\"https:\/\/tommcfarlin.com\/tag\/open-source-project-management\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">importanti per un progetto<\/a> :<\/p>\n<ol>\n<li>Non ci dovrebbe essere alcun &quot; <a href=\"https:\/\/wordpress.mediadoma.com\/it\/progetto-guardrails-design-by-committee\/\" title=\"design by comitato\">design by comitato&#8221;.<\/a> &#8220;<\/li>\n<li>Nessun altro che il team di sviluppo principale dovrebbe essere in grado di fornire sviluppo, staging e produzione.<\/li>\n<li>Nessuno dovrebbe essere in grado di scrivere in produzione tranne il team di sviluppo (e anche in questo caso dovrebbe esserci un processo di distribuzione).<\/li>\n<\/ol>\n<p>Non mi piace molto fare regole dure e veloci come questa in particolare perch\u00e9 le cose cambiano nel tempo o per necessit\u00e0 o per pi\u00f9 esperienza. Questo \u00e8 il motivo per cui mi piacciono le &quot;linee guida&quot;.<\/p>\n<p>Ma nel momento in cui scrivo, queste sono le cose che vedo giocare.<\/p>\n<h2>Ambienti di fornitura<\/h2>\n<p>Negli ultimi anni, abbiamo fatto molti progressi nella rapidit\u00e0 con cui possiamo eseguire il provisioning dei nostri sistemi in modo che tutti si rispecchino l&#8217;un l&#8217;altro (o in generale cos\u00ec). Ci\u00f2 include le nostre scatole di sviluppo, il modo in cui le nostre macchine locali rispecchiano lo staging e come lo staging rispecchia la produzione.<\/p>\n<p>Fornire un nuovo ambiente, pi\u00f9 o meno. Rotola con esso.<\/p>\n<p>Cio\u00e8 se &quot;funziona sulla mia macchina&quot; dovrebbe effettivamente essere vero. Non \u00e8 una scusa per non essere in grado di riprodurre un bug.<\/p>\n<p>E quando \u00e8 vero, \u00e8 probabile che lo sia anche sulle macchine altrui, sulla messa in scena e sulla produzione. E questo \u00e8 carino, vero? Voglio dire, facciamo girare le nostre scatole, distribuiamo i nostri script o facciamo quello che facciamo e poi abbiamo la configurazione di cui abbiamo bisogno.<\/p>\n<p>Quindi cosa significa fare il provisioning degli ambienti? Dipende dall&#8217;ambiente a cui ti riferisci.<\/p>\n<h3>Com&#8217;\u00e8 davvero questo aspetto?<\/h3>\n<p>Se stai lavorando in WordPress, cosa che presumo tu sia se stai leggendo questo, allora presuppone che tu stia eseguendo un server Web, un database e almeno PHP.<\/p>\n<p>Un ambiente di sviluppo pu\u00f2 essere simile al seguente:<\/p>\n<ul>\n<li><a href=\"https:\/\/www.apache.org\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">Apache<\/a> di <a href=\"https:\/\/www.nginx.com\/resources\/wiki\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">Nginx<\/a> ,<\/li>\n<li>MySQL che \u00e8 il pi\u00f9 comune,<\/li>\n<li>Almeno PHP 5.2.4 (con PHP 7.1 consigliato),<\/li>\n<li>O qualcosa di paragonabile.<\/li>\n<\/ul>\n<p>Potresti anche usare qualcosa come <a href=\"https:\/\/tommcfarlin.com\/laravel-valet-for-wordpress\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">Laravel Valet<\/a> o qualcosa come <a href=\"https:\/\/github.com\/Varying-Vagrant-Vagrants\/VVV\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">VVV<\/a>. Tutto dipende dalla natura del tuo lavoro.<\/p>\n<p>Inoltre, a seconda della natura della tua attivit\u00e0, potresti avere un IDE assegnato a te insieme a vari file di configurazione per <a href=\"https:\/\/tommcfarlin.com\/following-the-wordpress-coding-standards\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">applicare determinate regole<\/a>.<\/p>\n<h3>E il resto degli ambienti?<\/h3>\n<p>Come di solito:<\/p>\n<ul>\n<li>lo sviluppo si riferisce all&#8217;installazione sulla macchina locale,<\/li>\n<li>lo staging si riferisce all&#8217;area in cui tu e gli stakeholder potete testare,<\/li>\n<li>e la produzione \u00e8 dove risiede l&#8217;applicazione.<\/li>\n<\/ul>\n<p>Ma anche questo sembra diverso a seconda di dove lavori, come \u00e8 organizzato il tuo lavoro e cos\u00ec via. Non si tratta tanto di come viene utilizzato, ma di come viene utilizzato.<\/p>\n<h4>Messa in scena<\/h4>\n<p>Di solito viene eseguito il provisioning su un server (o un gruppo di server a seconda delle dimensioni del progetto) in cui \u00e8 possibile distribuire il codice pi\u00f9 recente per il test. Pu\u00f2 includere funzionalit\u00e0 parziali, dati di test e solo un sottoinsieme di informazioni dalla produzione (se si sceglie di estrarre tali informazioni, ovvero il database, dall&#8217;ambiente di produzione).<\/p>\n<p>Ci\u00f2 offre a te e alle altre parti interessate la possibilit\u00e0 di rivedere ci\u00f2 che sta uscendo e come funzioner\u00e0 nella produzione senza doversi preoccupare di distruggere qualsiasi cosa sensibile.<\/p>\n<p>Il codice viene comunemente distribuito da un ramo, solitamente master, dal tuo repository Git (se \u00e8 quello che stai usando). E strumenti come <a href=\"https:\/\/deploybot.com\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">DeployBot<\/a>, <a href=\"https:\/\/circleci.com\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">CircleCI<\/a>, <a href=\"https:\/\/travis-ci.org\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">Travis CI<\/a>, <a href=\"https:\/\/github.com\/phpro\/grumphp\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">GrumPHP<\/a>, <a href=\"http:\/\/behat.org\/en\/latest\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">Behat<\/a> e cos\u00ec via vengono utilizzati anche per valutare la qualit\u00e0 del codice, eseguire qualsiasi test automatizzato e infine distribuire il codice.<\/p>\n<p>Alla fine, verr\u00e0 eseguito il provisioning di ogni ambiente in modo da poter essere rapidamente replicato su macchine locali, server di staging e server di produzione. Inoltre, dovrebbe essere facile eseguire il push e il pull dei dati tra di loro per semplificare il lavoro con i dati.<\/p>\n<h4>Produzione<\/h4>\n<p>Infine, la produzione \u00e8 tutta incentrata sul progetto di funzionamento vero e proprio; Ci\u00f2 significa che ha il server, l&#8217;applicazione e il database in esecuzione insieme e viene utilizzato dagli utenti.<\/p>\n<p>Ci\u00f2 significa anche che il codice \u00e8 in una posizione stabile. \u00c8 probabile che siano in atto meccanismi di registrazione che avviseranno il team di sviluppo di eventuali problemi. Non dovrebbe verificarsi alcuna modifica del codice in questo ambiente senza che sia stato prima superato il QA o lo staging.<\/p>\n<h3>E i processi in atto?<\/h3>\n<p>Ok, quindi supponiamo che tu stia lavorando con una configurazione tradizionale, per mancanza di un termine migliore, in cui tutte le tue distribuzioni vengono eseguite tramite S\/FTP in un ambiente di produzione (o addirittura staging). In questo modo, gli utenti possono estrarre i file, apportare le modifiche e ripristinarli.<\/p>\n<p>Non va bene.<\/p>\n<p>Ci\u00f2 significa che chiunque disponga delle credenziali pu\u00f2 accedere, apportare modifiche e ignorare il controllo del codice sorgente, l&#8217;integrazione continua, gli strumenti di garanzia della qualit\u00e0 e cos\u00ec via, eseguire le modifiche desiderate.<\/p>\n<p>Mina l&#8217;intero processo messo in atto. Questa non solo bypassa la procedura standard (che \u00e8 in atto per un motivo, ovviamente), ma finisce per rompere il codice che uno sviluppatore o un team di sviluppatori ha sulle proprie macchine principalmente perch\u00e9 ci\u00f2 che \u00e8 in produzione non \u00e8 pi\u00f9 sincronizzato con il repository del codice.<\/p>\n<p>Inoltre, questo codice potrebbe essere distribuito tra rami che devono ancora essere uniti o distribuiti. Questo ci lascia con una variet\u00e0 di situazioni in cui sviluppatori e clienti hanno interrotto alcune parti del processo di compilazione e quindi l&#8217;intero progetto.<\/p>\n<p>Quando arriva il momento di controllare la produzione, non \u00e8 sincronizzata con lo sviluppo e la messa in scena e nessuno sa perch\u00e9. Quando arriva il momento di implementare, le modifiche vengono sovrascritte e i responsabili hanno perso ci\u00f2 che pensavano di vedere.<\/p>\n<h3>Cosa deve fare una squadra?<\/h3>\n<p>Non so se c&#8217;\u00e8 una risposta giusta a questa domanda, ma pi\u00f9 a lungo lavoro in questo settore, pi\u00f9 credo che l&#8217;azienda &#8211; o le aziende &#8211; responsabili della creazione della soluzione per il cliente dovrebbero avere il controllo del processo dalla fine. finire.<\/p>\n<ul>\n<li>I designer sono responsabili della gestione delle loro aree di creazione di concetti, mock, creazione di modelli demo e sollecitazione di feedback,<\/li>\n<li>I Project Manager sono responsabili della comunicazione con i reparti,<\/li>\n<li>Gli sviluppatori sono responsabili dell&#8217;implementazione della soluzione e del collegamento tra il lavoro dei progettisti e il back-end funzionale,<\/li>\n<li>Il cliente \u00e8 responsabile della revisione delle modifiche, della fornitura di feedback e della fornitura di qualsiasi altra informazione necessaria per completare l&#8217;attivit\u00e0.<\/li>\n<\/ul>\n<p>Ci\u00f2 significa che quando si tratta di configurare il dominio, l&#8217;hosting, gli ambienti, il controllo della versione, il processo di compilazione e l&#8217;integrazione continua, e tutto ci\u00f2 che ho trascurato di menzionare ricade direttamente sul team di sviluppo.<\/p>\n<p><a href=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-166423-61e793a807c63.jpg\" data-rel=\"lightbox\"><img decoding=\"async\" class=\"SDStudio-light-box-enable SDStudio-editor-tools-md-imp\" src=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-166423-61e793a807c63.jpg\" alt=\"Guardrail del progetto: ambienti di fornitura\" ><\/a><\/p>\n<p>Rimani in trincea, rimani sul bersaglio (ma fai attenzione a chi ti circonda).<\/p>\n<p>In poche parole, queste non sono responsabilit\u00e0 del cliente n\u00e9 dovrebbero esserlo. I limiti di responsabilit\u00e0 dovrebbero essere stabiliti, mantenuti e rispettati in tutti i team, non solo sviluppatori e clienti o clienti e designer o designer e sviluppatori e cos\u00ec via.<\/p>\n<h2>Qual \u00e8 il prossimo?<\/h2>\n<p>Nel prossimo post parler\u00f2 delle responsabilit\u00e0 che gli sviluppatori (e altre parti interessate) hanno nella manutenzione degli ambienti per il codice.<\/p>\n<p>Cio\u00e8, chi dovrebbe essere responsabile di cosa e chi ha accesso per leggere e scrivere quali dati e come possono in definitiva influenzare il risultato del progetto.<\/p>\n<p><div id=\"PostUnique_PostSource\" style=\"padding-top: 50px\">Fonte di registrazione:  <a target=\"_blank\" rel=\"noopener nofollow\" href=\"\/\/tommcfarlin.com\" class=\"external external_icon\">tommcfarlin.com<\/a><\/div><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Cosa significa eseguire il provisioning degli ambienti? Dipende davvero dall&#8217;ambiente di cui stai parlando, quindi diamo un&#8217;occhiata a ciascuno.<\/p>\n","protected":false},"author":1,"featured_media":166424,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":"","_wp_rev_ctl_limit":""},"categories":[751,720],"tags":[1168],"class_list":["post-229891","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-open-source-projektmanagement-3","category-sviluppatore","tag-affiai-it"],"_links":{"self":[{"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/posts\/229891","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/comments?post=229891"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/posts\/229891\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/media\/166424"}],"wp:attachment":[{"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/media?parent=229891"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/categories?post=229891"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/tags?post=229891"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}