Як синхронізувати номер версії SVN із веб-сайтом ASP.NET?


93

Внизу стек переповнення має номер версії диверсії:

версія svn: 679

Я хочу використовувати таке автоматичне встановлення версій для своїх .NET Web Site/Applicationпроектів / рішень Windows Forms, WPD.

Як це реалізувати?


@Balloon Якщо ви використовуєте TortoiseSVN, ви можете використовувати упаковану програму SubWCRev . Він запитує робочу копію і повідомляє вам лише найвищий номер редакції. Слід визнати, що це клієнтський підхід до проблеми на стороні сервера, але оскільки це приємна програма командного рядка, ви повинні мати можливість захопити її результати для використання досить легко.
nickf

Якщо ви не використовуєте TortoiseSVN для SubWCRev, як я вже говорив тут , ви можете використовувати svnversion, який робить те саме.
nickf

Відповіді:


31

Схоже, Джефф використовує CruiseControl.NET на основі перегляду стенограм подкастів. Здається, це має автоматизовані можливості розгортання від контролю джерела до виробництва. Це може бути там, де відбувається вставка?


2
Якщо ви не використовуєте CruiseControl.Net, тоді перевірте мою відповідь (безсоромна вилка!) - stackoverflow.com/questions/163/… ; o)
Ендрю

посилання порушено @saint_groceon
Cacho Santa

27

Ми робимо це за допомогою xUnit.net для наших автоматизованих збірок. Ми використовуємо CruiseControl.net(і випробовуємо TeamCity). Завдання MSBuild, яке ми запускаємо для безперервної інтеграції, автоматично змінює для нас номер збірки, тому отриманий файл збірки ZIP містить належним чином встановлений версій DLL та EXE.

Наш файл MSBuild містить посилання на UseTask для DLL, яка замінює регулярні вирази: (Ви можете використовувати цю DLL, оскільки вона також охоплюється ліцензією MS-PL)

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

Далі ми витягуємо номер збірки, який автоматично надається системою CI. Ви також можете отримати свого постачальника керування джерелом, щоб вказати номер редакції джерела, якщо хочете, але ми виявили, що номер збірки в системі CI був більш корисним, оскільки не тільки може бачити результати інтеграції за номером збірки CI, який також надає посилання назад до наборів змін, які були включені у збірку.

 <! - Каскадні спроби знайти номер збірки ->

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

(Ми пробуємо BUILD_NUMBER, який є від TeamCity, потім ccnetlabel, який є від CC.net, і якщо жодного з них немає, ми встановлюємо значення за замовчуванням до 0, щоб ми могли протестувати автоматичний сценарій збірки вручну.)

Далі ми маємо завдання, яке встановлює номер збірки у файл GlobalAssemblyInfo.cs, який ми пов’язуємо з усіма нашими проектами:

 <Target Name = "SetVersionNumber">
   <RegexReplace
       Pattern = 'AssemblyVersion \ ("(\ d + \. \ D + \. \ D +) \. \ D +" \)'
       Заміна = 'AssemblyVersion ("$ 1. $ (BuildNumber)")'
       Файли = 'GlobalAssemblyInfo.cs' />
   <Exec Command = "attrib -r xunit.installer \ App.manifest" />
 </Target>

Це знаходить атрибут AssemblyVersion і замінює номер версії abcd на abcBuildNumber. Зазвичай ми залишаємо джерело зареєстрованим у дереві, фіксуючи перші три частини номера будівельника, а четверту - нулем (fe, сьогодні це 1.0.2.0).

У процесі побудови переконайтеся, що завдання SetVersionNumber передує вашому завданням побудови. Зрештою, ми використовуємо наше завдання Zip, щоб заархівувати результати збірки, щоб мати історію двійкових файлів для кожної автоматизованої збірки.


25

Ви можете зробити це, додавши наступне в будь-якому місці коду

$Id:$

Так, наприклад, @Jeff зробив:

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

а при реєстрації на сервері замінив $ Id: $ поточним номером редакції. Я також знайшов це посилання .

Існує також $ Date: $ , $ Rev: $ , $ Revision: $


Потрібно переконатися, що у Файлах також встановлено атрибут svn: keywords Attribute, інакше $ Id $ тощо не замінюються автоматично. Дивіться цю сторінку. (Прокрутіть вниз до svn: ключові слова)
Michael Stum

1
Я щойно спробував це, використовуючи $ Rev $, і це працює - до певної міри. Проблема полягає в тому, що воно, здається, оновлює ключове слово лише тоді, коли змінюється файл, у якому воно з’являється. Це означає, що якщо в проект вносяться зміни, які не впливають на файл із $ Rev $ (у моєму випадку це моя головна сторінка ASP.NET), проект матиме вищу версію, ніж відображатиметься користувачеві . Хтось має якісь думки з цього приводу? Чи є спосіб змусити SVN завжди оновлювати ключові слова у файлі?
Кріс Робертс,

5
Чи не буде це просто вставити номер редакції останньої зміни до цього конкретного файлу? Я спробував налаштувати двофайлове сховище і змінив одне, а також спробував як експортувати, так і замовити, а інший файл залишився на рівні 1 в обох випадках.
Лассе В. Карлсен,

lassevk правильний, це змінюється лише тоді, коли змінюється сам файл.
Бруно Лопес

За допомогою VisualSVN та TortoiseSVN додавання $ Id: $ щойно призвело до того, що сторінка відтворила "$ Id: $". Може бути корисно відзначити, під яким сервером / клієнтом працює ця відповідь.
Тревіс

17

Якщо ви використовуєте ASP.Net MVC(як це робить StackOverflow), я написав просте 3-крокове керівництво щодо автоматичного отримання та відображення останньої версії SVN . Порадник був натхненний думкою собі саме про це питання! : o)


Звучить чудово, хоча посилання порушено!
Peter C

1
Це було чудовим рішенням для нас для автоматизації відображення версій на основі наших версій SVN. Однією з переваг є те, що для цього не потрібен дзвінок на ваш SVN-сервер.
Ben Elder

посилання порушено або сайт
недоступний

1
Спасибі @cacho, виправлено - помилка сервера [sic]; o)
Ендрю

10

@Balloon Якщо ви використовуєте TortoiseSVN, ви можете використовувати упаковану програму SubWCRev . Він запитує робочу копію і повідомляє вам лише найвищий номер редакції. Слід визнати, що це клієнтський підхід до проблеми на стороні сервера, але оскільки це приємна програма командного рядка, ви повинні мати можливість досить легко захопити її результати для використання.


9

$revта інші подібні - це редакції для окремих файлів, тому вони не змінюватимуться, якщо файл не зміниться. Номер на веб-сторінці (швидше за все, я тут припускаю) номер ревізії svn для всього проекту. Це відрізняється від версій файлів, на які вказували інші.

У цьому випадку я припускаю, що CCNET витягує номер редакції проекту і переписує частину веб-сторінки з цим номером. Будь-яке рішення CI повинно мати змогу це зробити, налаштувати це самостійно за допомогою CCNET та Teamcity (хоча не веб-сторінок, а автоматичної версії версій розгортання / складання).

Для цього скористайтеся рішенням CI, яке його підтримує, або використовуйте процес збірки (MSbuild / Nant), щоб зберегти цю версію та записати її у файли перед "розгортанням".


5

Щоб додати до відповіді @ BradWilson: "Ви також можете отримати постачальника послуг контролю джерела, щоб надати номер версії джерела, якщо хочете"

Для підключення Subversion та MSBuild: Проект спільних завдань MSBuild

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.