Jak zsynchronizować numer wersji SVN z moim ASP.NET strona internetowa?

Stack Overflow ma numer wersji subversion na dole:

SVN revision: 679

Chcę używać takiego automatycznego wersjonowania z moimi .NET Web Site/Application, Windows Forms, projektami/rozwiązaniami WPD.

Jak to zaimplementować?

Author: Insane Skull, 2008-08-01

7 answers

Wygląda na to, że Jeff używa CruiseControl.NET w oparciu o niektóre leafing przez stenogramy podcastów. Wydaje się, że ma to zautomatyzowane możliwości wdrażania od kontroli źródła do produkcji. Czy to może być miejsce, w którym odbywa się wstawianie?

 30
Author: saint_groceon,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-12-29 06:27:45

Robimy to z xUnit.net dla naszych zautomatyzowanych kompilacji. Używamy CruiseControl.net (i testujemy TeamCity). Zadanie MSBuild, które uruchamiamy dla ciągłej integracji, automatycznie zmienia dla nas numer kompilacji, więc wynikowy plik ZIP kompilacji zawiera odpowiednio wersjonowany zestaw bibliotek DLL i Ex.

Nasz plik MSBuild zawiera referencję UsingTask dla biblioteki DLL, która zastępuje wyrażenia regularne: (możesz użyć tej biblioteki DLL, ponieważ jest ona objęta licencją MS-PL jako dobrze)

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

Następnie wyodrębniamy numer kompilacji, który jest dostarczany automatycznie przez system CI. Możesz również poprosić dostawcę kontroli źródła, aby podał numer wersji źródła, jeśli chcesz, ale okazało się, że build # w systemie CI był bardziej przydatny, ponieważ nie tylko może zobaczyć wyniki integracji przez numer kompilacji CI, który również zapewnia link do zestawu zmian, które zostały zawarte w kompilacji.

 <!-- Cascading attempts to find a build number -->

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

(próbujemy BUILD_NUMBER, czyli z TeamCity, wtedy ccnetlabel, czyli z CC.net, a jeśli żaden z nich nie jest obecny, domyślnie ustawiamy 0, abyśmy mogli ręcznie przetestować automatyczny skrypt budowania.)

Następnie mamy zadanie, które ustawia numer kompilacji do GlobalAssemblyInfo.plik cs, który linkujemy do wszystkich naszych projektów:

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

To odnajduje atrybut AssemblyVersion i zastępuje numer wersji A.b.c.D numerem A.B.C.BuildNumber. Zwykle zostawiamy źródło sprawdzone w drzewie z trzema pierwszymi częściami numeru builder poprawione, a czwarty na zero (np. dzisiaj jest 1.0.2.0).

W procesie budowania upewnij się, że zadanie SetVersionNumber poprzedza zadanie budowania. Na koniec, używamy naszego zadania Zip, aby spakować wyniki kompilacji, dzięki czemu mamy historię plików binarnych dla każdej zautomatyzowanej kompilacji.

 26
Author: Brad Wilson,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-12-29 06:29:07

Możesz to zrobić, dodając w dowolnym miejscu w swoim kodzie

$Id:$

Więc na przykład @ Jeff zrobił:

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

I po sprawdzeniu na serwerze zamieniono $Id:$ na bieżący numer wersji. Ja również znalazłem to odniesienie .

Istnieje również $Data:$, $Rev:$, $rewizja:$

 25
Author: Nick Berardi,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-12-29 06:29:47

Jeśli używasz ASP.Net MVC (tak jak robi to StackOverflow), napisałem łatwy do naśladowania 3-krokowy przewodnik, w jaki sposób automatycznie uzyskać i wyświetlić najnowszą wersję SVN. Przewodnik został zainspirowany myśleniem o tym właśnie pytaniu! : o)

 17
Author: Andrew,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-12-29 06:28:48

@Balon Jeśli używasz TortoiseSVN, możesz użyć programu packaged SubWCRev . Zapytuje kopię roboczą i podaje tylko najwyższy numer wersji. Co prawda, wydaje się to być podejście po stronie klienta do problemu po stronie serwera, ale ponieważ jest to ładny program wiersza poleceń, powinieneś być w stanie uchwycić jego wyjście do użytku dość łatwo.

 10
Author: nickf,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-09-15 19:04:33

$rev inne podobne to wersje dla poszczególnych plików, więc nie zmienią się, dopóki Plik się nie zmieni. Numer na stronie jest (najprawdopodobniej, zakładam tutaj) numerem wersji svn dla całego projektu. Różni się to od wersji plików, na które wskazywali inni.

W tym przypadku zakładam, że CCNET pobiera numer wersji projektu i przepisuje część strony o tym numerze. Każde rozwiązanie CI powinno być w stanie to zrobić, ustawić to się z CCNET i Teamcity (choć nie strony internetowe, ale automatyczne wersjonowanie wersji deployment/assembly).

Aby to zrobić, użyj rozwiązania CI, które go obsługuje, lub użyj procesu kompilacji (MSbuild/Nant), aby zapisać tę wersję i zapisać ją do plików przed jej "wdrożeniem".

 9
Author: James Pogran,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-12-29 06:28:34

Aby dodać do odpowiedzi @BradWilson: "Możesz również poprosić swojego dostawcę kontroli źródła, aby podał numer wersji źródła, jeśli chcesz"

Aby połączyć Subversion i MSBuild: MSBuild Community Tasks Project

 5
Author: jan,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-12-29 06:28:18