La soluzione migliore è utilizzare in modo esclusivo il tuo sistema di CI per tutte le build significative dal punto di vista organizzativo (rilasci, release candidate ecc ...).
Questo collega sistematicamente i binari rilasciati al contenuto del repository senza dover effettivamente archiviare i binari nel repository.
Ad esempio, se si utilizza SVN, utilizzare lo schema organizzativo del ramo principale;
fai tutto lo sviluppo giorno per giorno in / trunk e crea un tag / per ogni versione una volta che è pronta.
Configura il tuo sistema di CI per costruire da tag e da trunk, e falla scrivere in output su una directory di rete la cui struttura rispecchia la struttura di livello superiore del repository:
- / build / trunk / [giro] [data] [ID build] /
- / build / tag / release_0_1_3beta4 / [giro] [data] [ID build] /
Il sistema di compilazione dovrà trattare la directory / builds / trunk / come un buffer circolare, memorizzando le ultime n build, cancellando le vecchie build come vanno.
La directory / builds / tags / , d'altra parte, è un archivio permanente. Gli artefatti di build sono memorizzati in directory con nomi generati secondo lo schema seguente:
dove [rev] è l'ID revisione SVN, [data] è la data nel formato YYYYMMDD e [build_id] è un Contatore unico a 3 cifre, incrementato dalla prima build in poi, rendendo ogni directory di costruzione univoca.
Il processo sopra descritto offre i seguenti vantaggi:
-
Gli artefatti di costruzione sono legati sistematicamente all'origine che li ha generati, quindi puoi trovare facilmente il codice sorgente di un particolare artefatto di costruzione, (e viceversa).
-
Questo costituisce la base per un'ulteriore automazione del rilascio. Ad esempio, generazione automatica di documenti di rilascio ecc.