Domanda

Ho eseguito un insieme piuttosto complesso di progetto con diverse applicazioni indipendenti.Questi, tuttavia, un paio di componenti condivisi.Così ho un albero sorgente alla ricerca di qualcosa di simile al di sotto.

  • Il Mio Progetto
    • Applicazione Di Un
    • Condivisione1
    • Shared2
    • L'Applicazione B
    • Applicazione C

Tutte le applicazioni hanno la loro MSBuild script che genera il progetto e di tutte le risorse condivise di cui ha bisogno.Ho anche eseguire questi si basa su un CruiseControl controllata di continuous integration server di generazione.

Quando le applicazioni vengono distribuite sono distribuiti su più server per distribuire il carico.Questo significa che è estremamente importante tenere traccia di ciò che di compilazione/revisione è distribuito su ogni server diversi (abbiamo bisogno di avere la versione attuale versione della DLL, ad esempio “1.0.0.68”).

È altrettanto importante essere in grado di ricreare una revisione/costruzione che è stato costruito per essere in grado di ripristinare se qualcosa non ha funzionato come previsto (o sì, che succede ...).Oggi stiamo usando SourceSafe per il controllo del codice sorgente, ma possibile che per cambiare se potessimo presentare i suoi buoni motivi (SS è in realtà lavorando bene per noi così fino ad ora).

Un altro principio che cerchiamo di seguire è che è solo il codice che stato costruito e testato da il server di integrazione che abbiamo sviluppato ulteriormente.

"CrusieControl Costruire Etichette" soluzione

Abbiamo avuto diverse idee sulla soluzione di cui sopra.Il primo era quello di avere il server di integrazione continua a costruire e a livello locale distribuzione di un progetto e prova (non adesso).Come probabilmente sapete creare con successo in CruiseControl genera una build etichetta e credo che in qualche modo potrebbe utilizzare per impostare la versione della DLL del nostro file eseguibili (quindi costruire etichetta 35 vorresti creare una DLL come “1.0.0.35” )?L'idea fu quella di usare questa build etichetta per etichetta completa albero dei sorgenti.Allora probabilmente abbiamo potuto verificare che l'etichetta e ricreare la generazione più tardi.

Il motivo per etichettare il completo albero è quello di includere non solo l'effettiva applicazione del codice (che è in un posto nell'albero dei sorgenti), ma anche tutti gli elementi condivisi (che in diversi luoghi dell'albero).Quindi, una corretta compilazione della “Domanda di Una” avrebbe etichetta a tutto l'albero con etichetta “ApplicationA35”, per esempio.

Ci potrebbe però essere un problema quando si cerca di ricreare questa build e l'impostazione della versione DLL prima di distribuire, come noi, allora non si ha accesso a il CruiseControl generato costruire etichetta più.Se tutti CrusieControl costruire le etichette sono unici per tutti i progetti che abbiamo potuto utilizzare solo il numero di etichettatura, ma non è questo il caso (sia per le applicazioni A e B possono allo stesso tempo essere a costruire 35) quindi dobbiamo inserire il nome dell'applicazione in etichetta.Quindi SourceSafe etichetta “Application35”. Come posso ricreare costruire 34 e impostare 1.0.0.34 per la versione della DLL numeri di una volta abbiamo costruito costruire 35?

"Il numero di revisione" soluzione

Qualcuno mi ha detto che Subversion, per esempio, crea un numero di revisione per l'intero albero dei sorgenti su ogni check in – è questo il caso?Ha SourceSafe qualcosa di simile? Se questo è corretto l'idea è quindi di afferrare il numero di revisione, quando sempre aggiornati e costruire il CruiseControl server.Il numero di revisione potrebbe quindi essere utilizzato per impostare il numero della versione della DLL (per esempio “1.0.0.5678”).Credo che si potrebbe quindi ottenere questa versione specifica per Subversion, se necessario, e che quindi includono l'applicazione e tutti gli elementi condivisi per essere in grado di ricreare una versione specifica del passato. Vorresti che il lavoro e questo potrebbe anche essere raggiunto utilizzando SourceSafe?

Riassumere

Così i due requisiti principali sono:

  1. Essere in grado di traccia costruire/numero di revisione di costruire e distribuito DLL.
  2. Essere in grado di la ricostruzione di un passato di revisione/costruzione, impostare la vecchia build/numero di revisione sul file eseguibili di costruire (per rispettare il requisito 1).

Allora, come si potrebbe risolvere questo problema? Quale sarebbe la vostra preferita approccio e come è possibile risolvere (o hai una totalmente diversa idea?)?**Il piacere di dare risposte dettagliate.**

Domanda Bonus Quali sono le differenza tra un numero di revisione e di un numero di build e quando uno ha bisogno di entrambi?

È stato utile?

Soluzione

Il suo schema è il suono e realizzabili in VSS (anche se vorrei suggerire di prendere in considerazione un'alternativa, VSS è davvero un prodotto superato).

Per il "CI" Costruire - si dovrebbe fare il controllo delle versioni di dare un'occhiata a MSBuild Progetto Di Attività Della Community che è una "Versione" di attività.In genere si avrà un "Version.txt" nell'albero dei sorgenti e le attività MSBuild incrementerà il "Rilascio", mentre gli sviluppatori di controllo Maggiori.Minori.Il rilascio.I numeri di revisione (che è come un mio cliente che voleva).È possibile utilizzare revisione, se si preferisce.

Quindi si avrebbe un "FileUpdate" compiti per modificare AssemblyInfo.cs file con la nuova versione, e il tuo EXE e DLL" avrà la versione desiderata.

Infine il VSSLabel compito etichetta tutti i tuoi file in modo appropriato.

Per la tua "Ricostruzione" Costruire - si potrebbe modificare il vostro "Get" per il recupero di file che Etichetta, ovviamente, non eseguire la "Versione" di attività (come la SELEZIONE di una versione di costruire) e quindi il FileUpdate compiti dell'uso che il numero di versione.

Domanda Bonus:

Questi sono tutti "come la si desidera utilizzare" - vorrei utilizzare il numero di build, e il numero di build, che è quello che avevo incremento.Se si utilizza CI avrete molto di molte generazioni - la stragrande maggioranza non hanno alcuna intenzione di mai la distribuzione ovunque.

Maggiore e minore sono evidenti - ma la revisione ho sempre usato per un "aggiornamento rapido (Hotfix)" indicatore.Ho intenzione di avere un "1.3" release - che sarebbe in realtà essere un prodotto con dire 1.3.1234.0 versione.Mentre si lavora su 1.4 - ho trovato un bug e hanno bisogno di un hot fix come 1.3.2400.1.Poi, quando 1.4 è pronto sarebbe dire 1.4.3500.0

Altri suggerimenti

Ho bisogno di più spazio di quello di rispondere come commenti direttamente permette...

Grazie!Bella risposta!Quale sarebbe il differenza, cosa sarebbe meglio la soluzione di questo utilizzo di SubVersion per esempio?Richard Hallgren (15 ore fa)

I problemi con VSS non hanno nulla a che fare con questo esempio (anche se il "Etichettatura" caratteristica credo sia implementato in modo inefficiente...)

Qui ci sono un paio di problemi con VSS

1) la Ramificazione è praticamente impossibile 2) estrazione Condivisa non è generalmente utilizzato (so di alcune persone che hanno avuto successo con esso) 3) le prestazioni sono molto poveri - è estremamente "chiacchierone" 4) a meno che non si dispone di un piccolo repository - è completamente inaffidabile, al punto che per la maggior parte dei negozi è un ticchettio timebomb.

4 - il problema è che il VSS è implementato da tutta la repository di essere rappresentato come "flat file nel file system.Quando il repository ottiene oltre una certa dimensione (credo 4GB ma io non sono sicuro di figura) si ha la possibilità di "corruzione".Come la dimensione aumenta le possibilità di corruzione crescere fino a quando non diventa una quasi certezza.

Quindi, dare un'occhiata al tuo repository dimensioni - e se si sta in Gigabyte - mi raccomando fortemente di iniziare la pianificazione per la sostituzione di VSS.

A prescindere - a google di "VSS fa Schifo" dà 30K hits...Penso che se ti ha fatto iniziare a utilizzare un alterantive - si rende conto che è valsa la pena.

  1. Sono CC.net etichetta il successo si costruisce
  2. hanno ogni progetto nella soluzione link ad un comune solutioninfo.cs file che contiene il montaggio e la versione del file attributi (rimuovere da ogni progetti assemblyinfo.cs)
  3. Prima build hanno cruise control eseguire un msbuild regex sostituire (da msbuild compiti di comunità) per aggiornare le informazioni sulla versione che utilizza il cc.net costruire etichetta (passato come parametro per l'attività msbuild)
  4. costruire la soluzione, l'esecuzione dei test, fx cop ecc
  5. Facoltativamente ripristinare la soluzione info file

Il risultato è che tutti i gruppi in cc.net pubblicato costruire hanno lo stesso numero di versione che è conforme ad una etichetta nel repository del codice sorgente

UppercuT può fare tutto questo con un packaging personalizzato compito di dividere le applicazioni in alto.E per ottenere il numero di versione di origine, si potrebbe pensare a Subversion.

È anche incredibilmente facile per iniziare.

http://code.google.com/p/uppercut/

Alcune buone spiegazioni qui: UppercuT

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top