Sono DevOps / CI per il mio team di circa 10 sviluppatori. Sviluppiamo e implementiamo una sofisticata applicazione per la raccolta e la visualizzazione di dati scientifici. Sono la persona che ha introdotto CI al mio team e standardizzato e semplificato il processo di compilazione usando Jenkins, Maven, Python ecc. Usiamo Subversion per il controllo delle versioni, che non è la mia preferenza (ovviamente Git è) ma posso lavorare all'interno di quei parametri . L'argomento di questa indagine è la nostra strategia di ramificazione, che sto cercando di promuovere in una politica.
Come qualcuno che gestisce tutto il ciclo di vita oltre il punto di controllo delle modifiche, la mia preferenza è di non dover supportare più di due rami di codice: (1-PROD) che è attualmente distribuito in PROD e (2 -DEV) ciò che è in sviluppo. Questo semplice scenario semplifica la mia vita e la mancanza di flessibilità per quanto riguarda le filiali è ciò che consente efficienza e buon funzionamento nel mio dipartimento. Avere un singolo ramo unificato per release e non avere rami di funzionalità elimina la necessità di unire, il che è sempre un crapshoot, per usare un eufemismo. Quindi, il modello che sto proponendo richiederebbe, in teoria, di non unire mai nulla: se uno sviluppatore apporta modifiche alla PROD in 1-PROD, (s) è responsabile di applicare tali modifiche a 2-DEV, in modo che non Non dobbiamo fare fusioni nel processo di CI. Mantiene le cose pulite e stabili .
Tuttavia, vi è una tendenza all'interno del team e la gestione a ricorrere alla creazione di una nuova succursale ogni volta che si manifesta la minima discrepanza nei requisiti, e molte di queste potrebbero essere affrontate all'interno della stessa filiale, ad es. Commutando la funzionalità in sospeso utilizzando la configurazione finché non è pronta ecc. In ogni istanza di un nuovo ramo che è stato creato, ho dimostrato che l'isolamento dello sforzo di sviluppo poteva essere realizzato all'interno del ramo esistente utilizzando le impostazioni di configurazione. Non vorrei odiare lo stesso se non richiedessero anche che gli artefatti di build ufficiali venissero generati e distribuiti a varie istanze di test da quei rami (la distribuzione di PROD esce sempre dal ramo principale dopo che ogni possibile ramo di funzionalità è stato integrato). Quindi, se vogliono avere 100 filiali per gli sviluppatori, per me va bene purché siano responsabili di unirle in uno dei due rami che mi riguardano e io non devo supportare la distribuzione da lì a istanze reali. Anch'io lo odio di meno se più filiali non implicano l'orribile processo di fusione, che odio e cerco assolutamente di progettare un ambiente in cui non è fatto.
La mia proposta di strategia di ramificazione / implementazione (per supportare solo i due rami canonici nel processo di integrazione) è irragionevolmente semplicistica? La complicazione / entanglement associato alla flessibilità della ramificazione è semplicemente un fatto della vita nel mondo di DevOps / CI?