L'integrazione continua comporta l'unione automatica tra filiali?

5

Quando si imposta un ambiente di integrazione continuo, richiede sempre di avere il codice pull del server build e unire tra i rami?

O è qualcosa che NON vuoi MAI fare perché dipendere da un'unione automatica che di solito ha problemi (e richiede un intervento manuale).

    
posta user1361315 09.08.2012 - 21:36
fonte

7 risposte

12

Non ho mai visto un sistema CI fare alcuna fusione. In teoria potresti configurarlo per farlo ma, come hai detto, la build si interromperà se ti imbatterai in problemi di fusione.

Gli ambienti CI di solito hanno un ramo fisso specifico come il ramo "build" e il server CI monitorerà quel ramo per i nuovi check-in per attivare un nuovo ciclo di build.

    
risposta data 09.08.2012 - 21:47
fonte
5

CircleCI, il mio servizio CI ospitato può essere impostato per farlo. Cerchia automaticamente crea tutti i rami per impostazione predefinita. Per il nostro codice, le build verdi sul master vengono automaticamente integrate nel ramo di produzione. Certo, fallo solo se hai una buona suite di test.

Ora, questo caso è facile, perché nessuno spinge direttamente alla produzione.

Penso che ci sia un sacco di lavoro interessante che può andare avanti qui. Alla fine, mi piacerebbe ottenere tutti i rami di bugfix per auto-merge in master su verde. Sono stato in situazioni in cui sto lavorando su un bug, ho eseguito tutti i test, poi ho scoperto che ho bisogno di unirmi al master (piuttosto che al fast-foward), e dimentico di eseguire nuovamente tutti i test, e finisco per rompere il costruire.

Una caratteristica che mi interessa scrivere è un commento nel messaggio di commit che dice "unisci al ramo X, se è verde". In questo modo, non è mai possibile avere il master essere rotto.

Le altre risposte qui non hanno molto senso per me. Il tuo sistema di CI non deve essere stupido. Dovrebbe essere in grado di gestire con garbo i conflitti di fusione, non fondendosi e informando l'utente. E su qualsiasi ramo "condiviso", come master o produzione, le merges dovrebbero always essere veloci avanti!

    
risposta data 09.08.2012 - 22:14
fonte
4

Non farlo mai. L'unione automatica è solo una delle ragioni. Ancora più importante, dovresti essere in grado di impegnarti nel tuo ramo finché non hai finito, senza paura di rompere il tronco.

Tuttavia, se stai utilizzando uno strumento come Jenkins, potresti voler aggiungere una build automatizzata separata per la tua filiale, in modo da continuare a ricevere feedback rapidi sui commit.

    
risposta data 09.08.2012 - 21:48
fonte
1
Automated merge between branches? - That is simply not a good idea.

CI è un ottimo processo e deve essere impostato per progetti relativamente grandi. Tuttavia, non mi fiderei mai di unire automaticamente. Perché, è normale uscire per ottenere file uniti in modo errato con conseguente compilation error o pari a di unintended change in coding logic .

    
risposta data 09.08.2012 - 22:07
fonte
0

Non ho sentito parlare di alcun sistema di CI che fonderebbe automaticamente i rami. Perché? Perché non è sempre così facile, e anche se stai usando uno dei DVCS più sofisticati disponibili, è comunque possibile che un umano debba rivedere il codice che è stato modificato. È particolarmente complicato quando le persone hanno effettivamente cambiato i bit nello stesso file (cioè lo stesso metodo nella classe, stessa funzione).

Penso che la fusione automatica farebbe più male che bene. E alla fine tu (come sviluppatore) non vuoi perdere tempo a indagare su problemi che non sono reali, ed è successo solo perché un pezzo di codice non era intelligente come te, e couldn ' t capire quale dovrebbe essere il codice dopo la fusione.

    
risposta data 09.08.2012 - 21:50
fonte
0

L'unione deve sempre essere eseguita manualmente. Se progettate il software e gestite lo sviluppo con un certo grado di sanità mentale, i conflitti sorgono solo in occasioni molto rare, ma quando si verificano, hanno bisogno di un essere umano per garantire che il risultato unito abbia un senso.

Per ottenere il vantaggio dell'integrazione continua, gli sviluppatori devono unire le modifiche e controllare il loro lavoro in un repository / filiale centrale su base frequente (ogni ora o così).

    
risposta data 09.08.2012 - 22:10
fonte
0

La maggior parte delle risposte qui sottolinea i problemi della fusione automatizzata. Tuttavia, lo abbiamo usato con successo per unire dal nostro ramo di produzione al nostro ramo di test (le correzioni rapide e simili si unirebbero automaticamente al ribasso). E anche dal nostro ramo di test nel nostro ramo di sviluppo (le correzioni ai problemi scoperti durante i test si unirebbero automaticamente verso il basso). Nel nostro caso, tutte le unioni automatizzate sono andate via dalla produzione, dandoci l'opportunità di rivedere e testare le eventuali conseguenze dell'unione prima di inserire il codice in produzione.

Mi piacerebbe dire che il processo è stato perfetto, ma il nostro sistema CI fallirebbe in modo silenzioso (non eseguire l'unione) se i conflitti di unione richiedessero un intervento umano. Sarebbe stato molto meglio per il sistema inviare notifiche in modo che il team di sviluppo sapesse che le fusioni non funzionavano.

    
risposta data 23.03.2016 - 18:25
fonte

Leggi altre domande sui tag