È accettabile distribuire l'app Web in produzione direttamente da SVN

11

Domanda

C'è una ragione legittima NOT per usare SVN per i deployment di produzione, o si tratta semplicemente di un caso di preferenza personale e non esiste un vero caso contro SVN?

Sfondo

Il mio ambiente di lavoro ha una cultura di rilascio dei tag in SVN e quindi la distribuzione di tali versioni direttamente sui vari server Web utilizzando svn co o svn switch incluso direttamente alla produzione.

Personalmente ho un problema con questo perché credo che senza l'utilizzo di script di compilazione e distribuzione o di qualche modulo o distribuzione automatizzata si perdano le impostazioni dell'ambiente di integrazione in quanto non documentate. Tuttavia, più di questo ho la sensazione che ci possa essere un pericolo nascosto nel fare ciò che è stato trascurato, qualcosa che non ha ancora alzato la sua brutta testa.

Ho sollevato le mie preoccupazioni con lo staff operativo che è responsabile della distribuzione del codice nei vari ambienti (staging, pre-produzione, produzione ecc.). Le loro argomentazioni erano piuttosto che ha funzionato abbastanza bene finora, senza motivo cambiare.

Modifica

Cosa intendo per compilazione e distribuzione:

Ad esempio, se uno sviluppatore richiede un'impostazione web.config aggiunta per un particolare ambiente. Web.config in genere non viene mantenuto in svn e quindi questi file vengono aggiornati manualmente senza alcuna forma di script di build automatico. Quindi se sono persi o OPS dimentica di aggiungere un campo a web.config per un rilascio, allora hai dei problemi.

Uno script di build che dice utilizza XMLPoke per generare automaticamente un web.config appropriato per un particolare ambiente è l'ideale in quanto disponi di uno script versionable che documenta tutte le modifiche necessarie per ciascuno dei tuoi ambienti.

Metodo di generazione e distribuzione corrente

Per il progetto in questione uno sviluppatore crea una versione manualmente, altri progetti hanno la fase di creazione automatizzata con NANT o MSBuild, che è OK.

Le migrazioni dei database per la maggior parte dei progetti avvengono tramite script DB, o script di migrazione (Migrator.NET) o pacchetti CMS.

Di solito CI viene eseguito da Team City per ogni check-in, abbiamo un processo di revisione del codice che tutti i ticket sono fatti nelle filiali e poi sottoposti a peer review per validazione e correttezza / qualità prima del check-in (funziona bene).

Tuttavia il deploy effettivo del codice è praticamente sempre tramite SVN, sia tramite un checkout di una release con tag o più in generale uno SVN Switch. Questo è qualcosa che mi sembra strano che stiamo usando il nostro repository come parte del processo di distribuzione.

Generalmente la configurazione non cambia molto spesso, le uniche cose che saranno nei file di configurazione sono informazioni specifiche per l'ambiente. Tutto il resto è nel db.

Non fraintendermi funziona, funziona bene. Comunque voglio provare e spingere per una build e una distribuzione automatizzate. L'ho usato con Rails e Capistrano e per progetti personali con Cygwin, Nant e SSH.

Ancora più importante avrei bisogno di argomenti validi molto specifici per consentire ai miei colleghi di passare all'utilizzo di una build e di una distribuzione automatizzate.

O non ci sono argomenti veri validi contro l'utilizzo specifico di SVN per la distribuzione in produzione?

    
posta Justin Shield 26.08.2011 - 06:14
fonte

4 risposte

7

Dalla mia esperienza, ci sono sia vantaggi che svantaggi:

Pro:

  • A volte si eseguono correzioni urgenti sul server di produzione, quindi è possibile ricontrollarle direttamente da lì. (Sebbene teoricamente, per ragioni di sicurezza, è sempre consigliabile utilizzare l'accesso in sola lettura al repository dal server di produzione.)

  • Semplicità: consegna velocemente, anche se, come altri menzionati qui, passare a uno schema di aggiornamento-script può essere altrettanto semplice.

Contro:

  • Il tuo sistema può diventare instabile durante gli aggiornamenti di svn up e DB. Per un sito ad alto traffico questo significa che alcuni utenti colpiranno messaggi di errore, pagine rotte o pagine vuote nel migliore dei casi. Bene, questo è quello che vediamo molto spesso su vari servizi sociali. Un buon servizio, tuttavia, lo fa "atomicamente" nel senso che mette il sistema in modalità di manutenzione per la durata di un aggiornamento. ( Hai infranto reddit! )

  • Conflitti: la risoluzione di conflitti improvvisi sul server di produzione è una pessima idea: di nuovo, il servizio diventa instabile mentre lo risolvi.

  • File non collegati sul server di produzione che possono o meno appartenere a te, anche se ovviamente puoi evitarlo controllando la sottostruttura giusta nel repository.

  • Sicurezza: anche chi ha avuto accesso al tuo server di produzione, legittimamente o meno, ottiene l'accesso ai tuoi repository, possibilmente anche ad altri prodotti e possibilmente anche con accesso in scrittura! L'apertura generale del server SVN interno al mondo esterno è una cattiva idea. I repository di origine dovrebbero essere protetti da un firewall aziendale, periodo.

  • Ci saranno comunque degli script di aggiornamento, ad es. per l'aggiornamento della struttura del DB, la gestione dei cronjob, ecc, quindi perché non avere uno script che fa tutto? - ad esempio, rilascia l'ultima versione preconfezionata, passa alla modalità di manutenzione, aggiorna fonti, esegue script specifici del rilascio ecc.

Modifica: per quelli ancora sullo schema SVN, non dimenticarlo nella configurazione di apache:

<DirectoryMatch .svn>
    Order deny,allow
    Deny from all
</DirectoryMatch>
    
risposta data 26.08.2011 - 12:09
fonte
2

Ho installato un server CI al mio lavoro che crea automaticamente il nostro programma di installazione supponendo che i test delle unità passino con successo. Ci sono voluti circa un giorno di lavoro e mi ha salvato molto di più da quando l'ho installato.

Se c'è qualche processo manuale nella configurazione del tuo sito di release / installer / production, risparmierai invariabilmente te stesso e l'orario della compagnia. Questo è appropriato per te visto che dalla tua domanda sembra che ci siano passi di configurazione manuale nel tuo processo di configurazione.

Per un riferimento, vedi Joel stesso parla di come un processo di creazione con un solo clic ti salva nel breve a medio termine.

    
risposta data 26.08.2011 - 11:10
fonte
0

Assicurati di avere i controlli di accesso appropriati su SVN. Ad esempio, considera questo -

  • Le funzionalità sono archiviate per un rilascio
  • Il codice viene distribuito nella gestione temporanea, il QA fa il suo lavoro
  • I bug sono corretti, un altro giro di test (comunque funziona nel tuo team)
  • Idem per il pre-prod
  • Distribuisci in produzione

Se qualcuno effettua accidentalmente check in dopo la fase pre-prod, c'è il rischio di rompere qualcosa. Se questo è controllato - come in nessun check-in consentito durante il pre-prod, eccetto per le correzioni di bug - non vedo alcun rischio.

Aggiornamento: si verifica un problema in attesa che si verifichi se non si esegue il check-in dei file di configurazione. Non posso davvero offrire alcun consiglio per questo diverso da "per favore, e veloce!"

    
risposta data 26.08.2011 - 06:39
fonte
0

Sembra ok finché non c'è nulla al di fuori del repository. Infatti, credo che non si debba investire tempo in strumenti di distribuzione nei primi mesi del progetto. Perché ci saranno troppe implementazioni, non abbastanza clienti da essere preoccupati di un processo di rilascio formale.

Ma una volta che il progetto ha circa un anno, vale la pena considerare di investire nello strumento di distribuzione. I semplici motivi sono

  • Il business cresce, quindi prevedi di ospitarlo su più di un server
  • Potrebbero esserci dei bachi su un particolare ambiente e non c'è spazio per replicare il bug. Non esiste un modo semplice per configurarlo senza un processo tar-untar-forget_about_home_for_a_week.
  • Qualcuno potrebbe rompere la build. Chi ha rotto la build

Se vuoi convincerli, chiedi loro di configurare un altro server per i test interni o il QA.

    
risposta data 26.08.2011 - 09:30
fonte

Leggi altre domande sui tag