Qual è la proposta di valore di "build, release, run"?

5

Quando ho letto il fattore V dell'Applicazione Twelve-Factor vedo solo un risultato finale chiaro ed evidente che viene descritto:

it is impossible to make changes to the code at runtime

Forse dovrebbe essere ovvio, ma mentre sto scrivendo un documento interno per i miei colleghi perché dovremmo osservare più best practice ( come l'App Twelve-Factor) ho capito che posso t metto il dito esattamente su cosa si intende fare per separare build, release ed eseguire.

Si suppone che consenta un test isolato migliore dei singoli passaggi? (Se ho una build, posso testare l'unità e convalidare le dichiarazioni di dipendenza.Se ho un rilascio forse posso convalidare la configurazione, ma non posso validare / test di integrazione senza una distribuzione completa.)

Se facessimo un buon lavoro negli undici altri fattori dell'app Twelve Factor, ma li abbiamo creati, rilasciati ed eseguiti a casaccio o per nulla, cosa ci mancheremmo?

    
posta kojiro 06.03.2016 - 22:48
fonte

2 risposte

9

Penso che questo sia probabilmente meglio descritto affermando le cattive pratiche che sembra voler evitare. Ricordo i vecchi tempi in cui erano pratiche comuni. Ma con gli strumenti moderni di 'dev ops' che sono così facili da usare in questi giorni dubito che vengano visti più.

Correzioni di codice in tempo reale. (Esegui e Costruisci fasi sono uniti) Viene segnalato un bug, lo aggiusto sulla mia macchina di sviluppo, costruisco localmente e ftp la nuova dll / exe sulla scatola live. Copialo sopra la parte superiore di quello esistente. Nessun controllo per il controllo del codice sorgente. La mia casella di sviluppo è l'unico posto in cui è memorizzato il codice, se un altro sviluppatore fa lo stesso con un altro bug, il primo bug viene reintrodotto. Non è possibile eseguire il rollback

Modifiche alla configurazione live. (Esegui e rilascia gli stadi sono uniti) Vado su una scatola live e cambio manualmente la configurazione con notepad / vi e riavvia l'app e riprende le nuove impostazioni. Ancora nessuna memoria centrale della configurazione, nessun backup della vecchia configurazione, nessuna documentazione. Se la casella si interrompe, le modifiche andranno perse, se avrò più nodi finiranno tutti con configurazioni diverse.

Nessuna build centrale. (La fase di creazione non è definita) Sebbene sia utilizzato il controllo del codice sorgente, la compilazione viene eseguita localmente da qualsiasi versione che si trova in quella casella al momento. Sebbene la versione sia statica, non puoi legarla a una versione definitiva del codice. Le differenze locali, come le librerie installate e le impostazioni globali, come i percorsi e il registro, influiscono sulla versione finale. Quindi, ciò che funziona questa volta, potrebbe non funzionare la prossima volta.

Un altro relativo a nessuna build centrale

Nessuna archiviazione di versioni. (La fase di rilascio non è definita) la compilazione è completata e distribuita per la vita. Ma i file binari non sono versionati e archiviati. La domanda "quale versione è attiva" è difficile da rispondere e i rollback / re-deployment si basano sui backup delle macchine attive anziché sulla distribuzione "da zero"

    
risposta data 07.03.2016 - 22:22
fonte
2

Penso che quello che stai chiedendo sia spiegato (anche se non molto chiaramente) nel link che hai postato. Il bit più rilevante:

The twelve-factor app uses strict separation between the build, release, and run stages. For example, it is impossible to make changes to the code at runtime, since there is no way to propagate those changes back to the build stage.

Se apporti modifiche all'app distribuita, rendi la vita più difficile. La tua build non è più riproducibile (dato che ha dei passaggi post-build fatti in fase di esecuzione e che non vengono tracciati da nessuna parte). Potresti perdere patch e modifiche, poiché non vengono tracciati da nessuna parte. Se si desidera eseguire la distribuzione su un altro server, è necessario copiare manualmente ogni modifica apportata al primo server.

Nello scenario migliore, sei costretto a copiare manualmente ogni modifica apportata alla produzione sul tuo build di origine, che è molto soggetta a errori.

    
risposta data 07.03.2016 - 20:12
fonte

Leggi altre domande sui tag