La soluzione migliore è utilizzare in modo esclusivo il tuo sistema CI per tutte le build significative dal punto di vista organizzativo (release, release candidate ecc ...).
Ciò collega sistematicamente i file binari rilasciati al contenuto del repository senza dover effettivamente archiviare i binari nel repository.
Ad esempio, se si utilizza SVN, utilizzare lo schema organizzativo delle filiali principali; fare tutto lo sviluppo quotidiano in / trunk e creare un tag / per ogni versione una volta pronta.
Configura il tuo sistema CI per compilare dai tag e dal trunk e farlo scrivere in una directory di rete la cui struttura rispecchia la struttura di livello superiore del repository:
- / Costruisce / trunk / [giro] [data] [ID build] /
- / Costruisce / 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, eliminando le build precedenti mentre procede.
La directory / builds / tags / , d'altra parte, è un archivio permanente. Gli artefatti di compilazione stessi sono archiviati in directory con nomi generati secondo il seguente schema:
dove [rev] è l'ID di revisione SVN, [data] è la data nel formato AAAAMMGG e [build_id] è un contatore univoco a 3 cifre, che aumenta dal primo build in poi, rendendo unica ogni directory di build.
La procedura sopra descritta offre i seguenti vantaggi:
Gli artefatti da costruire sono legati sistematicamente alla fonte che li ha generati, quindi puoi trovare facilmente l'origine di un particolare artefatto da costruzione (e viceversa).
Ciò costituisce la base per un'ulteriore automazione del rilascio. Ad esempio, generazione automatica di documenti di rilascio ecc ...