Come sincronizzo il numero di revisione SVN con il mio sito Web ASP.NET?


93

Stack Overflow ha un numero di versione di subversion in basso:

revisione svn: 679

Voglio usare questo controllo automatico delle versioni con i miei .NET Web Site/Applicationprogetti / soluzioni Windows Forms e WPD.

Come lo implemento?


@Balloon Se stai usando TortoiseSVN, puoi usare il programma SubWCRev in pacchetto . Interroga una copia funzionante e ti dice solo il numero di revisione più alto. Certo, questo sembra essere un approccio lato client a un problema lato server, ma poiché è un bel programma a riga di comando, dovresti essere in grado di catturarne l'output per l'uso abbastanza facilmente.
nickf

Se non stai usando TortoiseSVN per SubWCRev come ho detto qui , puoi usare svnversion che fa la stessa cosa.
nickf

Risposte:


31

Sembra che Jeff stia usando CruiseControl.NET sulla base di alcuni sfogliando le trascrizioni dei podcast. Questo sembra avere funzionalità di distribuzione automatizzate dal controllo del codice sorgente alla produzione. Potrebbe essere questo il luogo in cui avviene l'inserimento?


2
Se non stai usando CruiseControl.Net, dai un'occhiata alla mia risposta (plug spudorato!) - stackoverflow.com/questions/163/… ; o)
Andrew

il collegamento è interrotto @saint_groceon
Cacho Santa,

27

Lo facciamo con xUnit.net per le nostre build automatizzate. Usiamo CruiseControl.net(e stiamo provando TeamCity). L'attività MSBuild che eseguiamo per l'integrazione continua cambia automaticamente il numero di build, quindi il file ZIP di build risultante contiene un set di DLL ed EXE con versione corretta.

Il nostro file MSBuild contiene un riferimento UsingTask per una DLL che sostituisce le espressioni regolari: (puoi usare questa DLL, poiché è coperta anche dalla licenza MS-PL)

  <UsingTask
     AssemblyFile = "3rdParty \ CodePlex.MSBuildTasks.dll"
     TaskName = "CodePlex.MSBuildTasks.RegexReplace" />

Successivamente, estraiamo il numero di build, che viene fornito automaticamente dal sistema CI. Puoi anche chiedere al tuo fornitore di controllo del codice sorgente di fornire il numero di revisione della sorgente, se lo desideri, ma abbiamo riscontrato che il numero di build nel sistema CI era più utile, perché non solo può vedere i risultati dell'integrazione in base al numero di build CI, che fornisce anche un link di nuovo al changeset che sono stati inclusi nella build.

 <! - Cascading tenta di trovare un numero di build ->

 <PropertyGroup Condition = "'$ (BuildNumber)' == ''">
   <BuildNumber> $ (BUILD_NUMBER) </BuildNumber>
 </PropertyGroup>
 <PropertyGroup Condition = "'$ (BuildNumber)' == ''">
   <BuildNumber> $ (ccnetlabel) </BuildNumber>
 </PropertyGroup>
 <PropertyGroup Condition = "'$ (BuildNumber)' == ''">
   <BuildNumber> 0 </BuildNumber>
 </PropertyGroup>

(Proviamo BUILD_NUMBER, che proviene da TeamCity, quindi ccnetlabel, che proviene da CC.net, e se nessuno dei due è presente, impostiamo il valore predefinito su 0, in modo da poter testare manualmente lo script di build automatizzato.)

Successivamente, abbiamo un'attività che imposta il numero di build in un file GlobalAssemblyInfo.cs che colleghiamo a tutti i nostri progetti:

 <Target Name = "SetVersionNumber">
   <RegexReplace
       Pattern = "AssemblyVersion \ (" (\ d + \. \ D + \. \ D +) \. \ D + "\)"
       Sostituzione = 'AssemblyVersion ("$ 1. $ (BuildNumber)")'
       Files = 'GlobalAssemblyInfo.cs' />
   <Exec Command = "attrib -r xunit.installer \ App.manifest" />
 </Target>

Questo trova l'attributo AssemblyVersion e sostituisce il numero di versione abcd con abcBuildNumber. Di solito lasceremo il sorgente controllato nell'albero con le prime tre parti del numero del generatore fisse e la quarta a zero (ad esempio, oggi è 1.0.2.0).

Nel processo di compilazione, assicurati che l'attività SetVersionNumber preceda l'attività di compilazione. Alla fine, usiamo la nostra attività Zip per comprimere i risultati della build in modo da avere una cronologia dei binari per ogni build automatizzata.


25

Puoi farlo aggiungendo quanto segue ovunque nel tuo codice

$Id:$

Quindi, ad esempio @Jeff ha fatto:

<div id="svnrevision">svn revision: $Id:$</div>

e una volta effettuato il check-in, il server ha sostituito $ Id: $ con il numero di revisione corrente. Ho trovato anche questo riferimento .

C'è anche $ Date: $ , $ Rev: $ , $ Revision: $


È necessario assicurarsi che i file abbiano anche l'attributo svn: keywords impostato, altrimenti $ Id $ ecc. Non vengono sostituiti automaticamente. Vedi questa pagina. (Scorri verso il basso fino a svn: parole chiave)
Michael Stum

1
L'ho appena provato usando $ Rev $ e funziona - in una certa misura. Il problema è che sembra aggiornare la parola chiave solo quando il file in cui appare viene modificato. Ciò significa che se vengono apportate modifiche al progetto che non interessano il file con $ Rev $ al suo interno (nel mio caso, la mia pagina master ASP.NET), il progetto avrà una revisione più alta di quella mostrata all'utente . Qualcuno ha qualche idea su questo? C'è un modo per fare in modo che SVN aggiorni sempre le parole chiave nel file?
Chris Roberts

5
Questo non inserirà semplicemente il numero di revisione dell'ultima modifica a quel particolare file? Ho provato a configurare un repository a due file e ne ho cambiato uno, e ho provato sia l'esportazione che il checkout, e l'altro file è rimasto a 1 in entrambi i casi.
Lasse V. Karlsen,

lassevk è corretto, cambia solo quando cambia il file stesso.
Bruno Lopes

Utilizzando VisualSVN e TortoiseSVN, l'aggiunta di $ Id: $ ha solo causato il rendering della pagina "$ Id: $". Può essere utile notare su quale server / client funziona questa risposta.
Travis

17

Se stai usando ASP.Net MVC(come fa StackOverflow), ho scritto una guida in 3 passaggi facile da seguire su come ottenere e visualizzare automaticamente l'ultima revisione SVN . La guida è stata ispirata dal pensare a me stesso su questa stessa domanda! : o)


Sembra fantastico, Link rotto però!
Peter C

1
Questa è stata un'ottima soluzione per noi per automatizzare la visualizzazione di un controllo delle versioni basato sulle nostre revisioni SVN. Un vantaggio è che non richiede una chiamata al server SVN.
Ben Elder

il collegamento è interrotto o il sito non funziona
Cacho Santa

1
Grazie @cacho, risolto - era un errore del server [sic]; o)
Andrew

10

@Balloon Se stai usando TortoiseSVN, puoi usare il programma SubWCRev in pacchetto . Interroga una copia funzionante e ti dice solo il numero di revisione più alto. Certo, questo sembra essere un approccio lato client a un problema lato server, ma poiché è un bel programma a riga di comando, dovresti essere in grado di catturarne l'output per l'uso abbastanza facilmente.


9

$reve altri simili sono revisioni per i singoli file, quindi non cambieranno a meno che il file non cambi. Il numero sulla pagina web è (molto probabilmente, sto assumendo qui) il numero di revisione svn per l'intero progetto. Questo è diverso dalle revisioni dei file, a cui altri hanno fatto riferimento.

In questo caso presumo che CCNET stia estraendo il numero di revisione del progetto e riscrivendo una parte della pagina web con quel numero. Qualsiasi soluzione CI dovrebbe essere in grado di farlo, configurarlo da solo con CCNET e Teamcity (sebbene non le pagine web, ma il controllo automatico delle versioni delle versioni di distribuzione / assembly).

Per eseguire questa operazione, utilizzare una soluzione CI che la supporti o utilizzare il processo di compilazione (MSbuild / Nant) per archiviare quella versione e scriverla nei file prima di "distribuirla".


5

Per aggiungere alla risposta di @ BradWilson: "Puoi anche chiedere al tuo fornitore di controllo del codice sorgente di fornire il numero di revisione del codice sorgente, se lo desideri"

Per connettere Subversion e MSBuild: MSBuild Community Tasks Project

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.