L'organizzazione per cui lavoro attualmente utilizza la distribuzione Web per il rilascio in diversi ambienti. La configurazione delle applicazioni Web (stringhe di connessione, URL del servizio e così via) viene gestita utilizzando le configurazioni della soluzione, con le trasformazioni app.config associate. Con il debug, tre ambienti di test e produzione, ci sono cinque configurazioni di soluzioni (quattro trasformazioni). Quando si esegue la distribuzione in un ambiente, la distribuzione Web crea le soluzioni rispetto alla configurazione selezionata e quindi la distribuisce utilizzando la trasformazione appropriata.
Sto cercando di spingerci a utilizzare un processo di gestione build e release più sofisticato. La società è strongmente legata all'utilizzo di strumenti Microsoft e ha accettato di utilizzare TFS Build 2015 (in sede).
Il processo corrente mi sembra inadatto per l'uso in combinazione con un approccio CI / CD e la gestione del rilascio di TFS. Non sono convinto che una build testata in una configurazione di soluzione debba essere ricostruita e promossa in una configurazione di soluzione diversa. L'altra preoccupazione è che questo sarebbe pesante per la manutenzione, richiedendo definizioni di compilazione separate e quindi definizioni di rilascio per ciascun ambiente.
Immagino che dovrebbero essere utilizzate solo due configurazioni di soluzione (debug e release). Il check-in per il ramo di sviluppo avvia automaticamente una build CI con la configurazione di debug. Per iniziare, la distribuzione richiederebbe una build manuale in modalità di rilascio. La definizione della versione potrebbe quindi essere utilizzata per promuovere questa build in ogni ambiente con la configurazione dell'applicazione pertinente, come richiesto.
Alla fine l'obiettivo sarebbe quello di automatizzare la distribuzione nella prima fase del test (ad esempio attraverso l'unione in un ramo di rilascio). Potrebbe anche essere utile estendere il catering a una terza configurazione di soluzione che viene implementata in un ambiente per l'esecuzione di test automatici.
Le mie domande sono:
- È mia opinione che sia preferibile non ricostruire ragionevolmente per ogni ambiente?
- È un approccio adeguato per raggiungere i miei obiettivi o ho perso un approccio diverso / migliore?
- Se si segue questo approccio, si ritiene preferibile lasciare in essere le configurazioni della soluzione (per le trasformazioni app.config), usando solo il debug / release per la build e quindi la trasformazione come parte del lavoro di rilascio? O è meglio gestire la configurazione attraverso le variabili di ambiente di definizione della versione (non abbiamo la gestione centralizzata della configurazione)?