Quale è più importante in una gerarchia di promozione del codice di un'applicazione Web? ambiente di produzione per riprendere la somiglianza o la propagazione unidirezionale?

3

Diciamo che hai una gerarchia di promozione del codice composta da diversi ambienti, (la parte polare) due dei quali sono sviluppo (dev) e produzione (prod).

Diciamo che hai anche un'applicazione web in cui i file importanti (ma non controllati dallo sviluppatore) vengono creati (e forse modificati) nell'ambiente di produzione.

Diciamo che tu (o qualcuno sopra di te) hai deciso che i file controllati / creati / alterati / eliminati nell'ambiente di produzione dovevano entrare nel repository.

Quale dei seguenti due gruppi di pratiche / approcci trovi meglio:

  1. Commettere queste modifiche di file non sviluppate apportate nell'ambiente di produzione in modo che il repository assomigli all'ambiente di produzione il più vicino e il più spesso possibile.

  2. Generalmente ignorando le alterazioni dell'ambiente di produzione non sviluppato, confidando nei backup per ripristinare l'ambiente di produzione nel caso in cui fosse danneggiato e mantenendo una risoluzione per evitare di spingere gli sviluppi attraverso la gerarchia della promozione nella direzione opposta (evitando di spingere prod a dev), impegnando solo i file trovati nell'ambiente di produzione se fossero assolutamente necessari in altri ambienti per lo sviluppo.

Quindi, 1 o 2, e perché?

PS - Al momento sono leggermente prevenuto verso il mantenimento dell'ambiente di produzione per la somiglianza del repository (opzione 1), ma tengo una mente aperta e accetterei una risposta a supporto di entrambi.

    
posta ghbarratt 20.06.2012 - 00:36
fonte

3 risposte

3

Se l'applicazione sta creando i propri file, separati da quelli creati dagli sviluppatori, si sta essenzialmente parlando dell'utilizzo del controllo origine dello sviluppo come sistema di backup. Non ci sono vantaggi rispetto a nessun altro tipo di sistema di backup e si consente ai file di essere modificati da persone che non capiscono il controllo del codice sorgente. Questo mi sembra pericoloso.

Questo non significa che non si dovrebbe prendere una copia di questi file ogni tanto e distribuirli a dev, solo per mantenere i sistemi sincronizzati, in modo che i test siano una riproduzione più valida della produzione. Basta non farlo attraverso il controllo del codice sorgente e il normale processo di compilazione. Se lo hai fatto, cosa succederebbe se avvii una build e poi l'applicazione modifica un file che viene poi sovrascritto dalla distribuzione?

Un'altra opzione, naturalmente, è metterli nel proprio controllo del codice sorgente e dare un controllo bidirezionale all'applicazione (in pratica, utilizzare VCS come database per l'applicazione). In questo modo puoi gestire la cronologia delle revisioni e simili senza doverli confondere con le modifiche degli sviluppatori. DVCS andrebbe bene per questo, in modo che tu possa apportare modifiche a un ambiente e poi inviarlo a un altro, magari persino un ambiente di test del contenuto in cui puoi apportare modifiche, testarle e poi inviarle sia alla produzione che all'applicazione -test environment.

Anche se i file modificati dall'applicazione sono gli stessi file modificati dagli sviluppatori, e quindi devono essere uniti, se i file sono binari e modificati spesso, dovrei pensare molto sulle conseguenze rispetto a la dimensione del mio database di controllo del codice sorgente.

Se fossero testo allora abbastanza equo ma, a meno che non fossi molto sicuro delle persone che apportano modifiche, vorrei di nuovo usare un DVCS e assicurarmi che l'applicazione si impegni su un clone del database, solo così posso tirare li invia al computer di uno sviluppatore e li controlla prima di eseguire il commit nel database di master build.

    
risposta data 20.06.2012 - 01:43
fonte
1

Vado con "Salva in anticipo, salva spesso". Oppure, in questo caso, "Impegnati presto, commetti spesso".

Il tuo approccio # 1 sembra ragionevole, a patto di avere la granularità giusta. In qualsiasi contesto di codifica, i check-in vengono eseguiti quando hanno senso. Potrebbe non avere senso creare sei nuove revisioni di controllo per errori di ortografia minori, nel nome della fedeltà quasi in tempo reale.

D'altra parte, il tuo approccio # 2 sembra destinato a fallire, se non altro per il fatto che contiene le parole "fiducia nei backup". [shudder] Sembra anche che si scontrino con l'istinto del decisore di mettere questi file nel controllo del codice sorgente in primo luogo.

    
risposta data 20.06.2012 - 00:46
fonte
1

Vorrei andare con l'opzione 2.

La separazione delle preoccupazioni mi fa pensare che le funzionalità e le funzionalità dovrebbero essere il più possibile indipendenti dal contenuto.

Anche i backup sono per il ripristino di un ambiente in uno stato di produzione, ad esempio un disco rigido ect .. Se il backup è l'ambiente di sviluppo (o anche test / staging) e qualcuno ha commesso una funzione semi-cotta .. non è possibile ripristinare il tuo ambiente di produzione.

    
risposta data 20.06.2012 - 02:28
fonte