Comment synchroniser le numéro de révision SVN avec mon site Web ASP.NET?


93

Stack Overflow a un numéro de version de subversion en bas:

révision svn: 679

Je souhaite utiliser un tel contrôle de version automatique avec mes .NET Web Site/Applicationprojets / solutions Windows Forms, WPD.

Comment mettre en œuvre cela?


@Balloon Si vous utilisez TortoiseSVN, vous pouvez utiliser le programme intégré SubWCRev . Il interroge une copie de travail et ne vous indique que le numéro de révision le plus élevé. Certes, cela semble être une approche côté client pour un problème côté serveur, mais comme c'est un bon programme en ligne de commande, vous devriez être en mesure de capturer sa sortie pour une utilisation assez facilement.
nickf le

Si vous n'utilisez pas TortoiseSVN pour SubWCRev comme je l'ai dit ici , vous pouvez utiliser svnversion qui fait la même chose.
nickf

Réponses:


31

On dirait que Jeff utilise CruiseControl.NET sur la base de quelques feuillets dans les transcriptions de podcast. Cela semble avoir des capacités de déploiement automatisées du contrôle de source à la production. Serait-ce là où l'insertion a lieu?


2
Si vous n'utilisez pas CruiseControl.Net, vérifiez ma réponse (prise sans vergogne!) - stackoverflow.com/questions/163/... ; o)
Andrew

link is broken @saint_groceon
Cacho Santa

27

Nous faisons cela avec xUnit.net pour nos builds automatisés. Nous utilisons CruiseControl.net(et essayons TeamCity). La tâche MSBuild que nous exécutons pour l'intégration continue modifie automatiquement le numéro de version pour nous, de sorte que le fichier ZIP de construction résultant contient un ensemble correctement versionné de DLL et EXE.

Notre fichier MSBuild contient une référence UsingTask pour une DLL qui remplace les expressions régulières: (vous êtes invité à utiliser cette DLL, car elle est également couverte par la licence MS-PL)

  <Utilisation de la tâche
     AssemblyFile = "3rdParty \ CodePlex.MSBuildTasks.dll"
     TaskName = "CodePlex.MSBuildTasks.RegexReplace" />

Ensuite, nous extrayons le numéro de build, qui est fourni automatiquement par le système CI. Vous pouvez également demander à votre fournisseur de contrôle de code source de fournir le numéro de révision source si vous le souhaitez, mais nous avons trouvé que le numéro de version dans le système CI était plus utile, car non seulement peut voir les résultats de l'intégration par le numéro de version CI, qui fournit également un lien vers les ensembles de modifications qui ont été inclus dans la construction.

 <! - Tentatives en cascade pour trouver un numéro de build ->

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

(Nous essayons BUILD_NUMBER, qui provient de TeamCity, puis ccnetlabel, qui provient de CC.net, et si aucun des deux n'est présent, nous avons par défaut la valeur 0, afin de pouvoir tester le script de construction automatisé manuellement.)

Ensuite, nous avons une tâche qui définit le numéro de build dans un fichier GlobalAssemblyInfo.cs que nous lions dans tous nos projets:

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

Cela trouve l'attribut AssemblyVersion et remplace le numéro de version abcd par abcBuildNumber. Nous laisserons généralement la source archivée dans l'arborescence avec les trois premières parties du numéro de constructeur fixées, et la quatrième à zéro (par exemple, aujourd'hui c'est 1.0.2.0).

Dans votre processus de génération, assurez-vous que la tâche SetVersionNumber précède votre tâche de génération. À la fin, nous utilisons notre tâche Zip pour compresser les résultats de compilation afin d'avoir un historique des binaires pour chaque compilation automatisée.


25

Vous pouvez le faire en ajoutant ce qui suit n'importe où dans votre code

$Id:$

Par exemple, @Jeff a fait:

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

et lors de l'enregistrement, le serveur a remplacé $ Id: $ par le numéro de révision actuel. J'ai également trouvé cette référence .

Il y a aussi $ Date: $ , $ Rev: $ , $ Révision: $


Vous devez vous assurer que l'attribut svn: keywords est également défini dans les fichiers, sinon $ Id $ etc. ne sont pas remplacés automatiquement. Voir cette page. (Faites défiler jusqu'à svn: mots-clés)
Michael Stum

1
Je viens d'essayer cela en utilisant $ Rev $ et cela fonctionne - dans une certaine mesure. Le problème est qu'il semble mettre à jour le mot-clé uniquement lorsque le fichier dans lequel il apparaît est modifié. Cela signifie que si des modifications sont apportées au projet qui n'affectent pas le fichier contenant le $ Rev $ (dans mon cas, ma page maître ASP.NET), le projet aura une révision supérieure à celle affichée à l'utilisateur . Quelqu'un a-t-il des idées à ce sujet? Existe-t-il un moyen pour SVN de toujours mettre à jour les mots-clés dans le fichier?
Chris Roberts

5
N'est-ce pas simplement insérer le numéro de révision de la dernière modification de ce fichier particulier? J'ai essayé de configurer un référentiel à deux fichiers et j'en ai changé un, et j'ai essayé à la fois l'exportation et l'extraction, et l'autre fichier est resté à 1 dans les deux cas.
Lasse V. Karlsen

lassevk est correct, cela ne change que lorsque le fichier lui-même change.
Bruno Lopes

En utilisant VisualSVN et TortoiseSVN, l'ajout de $ Id: $ a simplement provoqué le rendu de la page "$ Id: $". Il peut être utile de noter sous quel serveur / client cette réponse fonctionne.
Travis

17

Si vous utilisez ASP.Net MVC(comme le fait StackOverflow), j'ai écrit un guide en 3 étapes facile à suivre sur la façon d'obtenir et d'afficher automatiquement la dernière révision SVN . Le guide a été inspiré en pensant à moi-même à cette question même! : o)


Sonne bien, Link cassé cependant!
Peter C

1
C'était une excellente solution pour nous d'automatiser l'affichage d'un contrôle de version basé sur nos révisions SVN. Un avantage est qu'il ne nécessite pas d'appel à votre serveur SVN.
Ben Elder

le lien est cassé ou le site est en panne
Cacho Santa

1
Merci @cacho, corrigé - c'était une faute de serveur [sic]; o)
Andrew

10

@Balloon Si vous utilisez TortoiseSVN, vous pouvez utiliser le programme intégré SubWCRev . Il interroge une copie de travail et ne vous indique que le numéro de révision le plus élevé. Certes, cela semble être une approche côté client pour un problème côté serveur, mais comme c'est un bon programme en ligne de commande, vous devriez être en mesure de capturer sa sortie pour une utilisation assez facilement.


9

$revet d'autres comme ça sont des révisions pour les fichiers individuels, donc ils ne changeront pas à moins que le fichier change. Le numéro sur la page Web est (très probablement, je suppose ici) le numéro de révision svn pour l'ensemble du projet. C'est différent des révisions de fichiers, auxquelles d'autres ont fait allusion.

Dans ce cas, je suppose que CCNET extrait le numéro de révision du projet et réécrit une partie de la page Web avec ce numéro. Toute solution CI devrait pouvoir le faire, configurer cela moi-même avec CCNET et Teamcity (mais pas des pages Web, mais une gestion automatique des versions des versions de déploiement / d'assemblage).

Pour ce faire, utilisez une solution CI qui la prend en charge ou utilisez votre processus de génération (MSbuild / Nant) pour stocker cette version et l'écrire dans les fichiers avant de la «déployer».


5

Pour ajouter à la réponse de @ BradWilson: "Vous pouvez également demander à votre fournisseur de contrôle de code source de fournir le numéro de révision source si vous le souhaitez"

Pour connecter Subversion et MSBuild: MSBuild Community Tasks Project

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.