Stack Overflow ma numer wersji subversion na dole:
Wersja SVN: 679
Chcę używać takiego automatycznego wersjonowania z moimi .NET Web Site/Application
projektami / rozwiązaniami, Windows Forms, WPD.
Jak to zaimplementować?
Stack Overflow ma numer wersji subversion na dole:
Wersja SVN: 679
Chcę używać takiego automatycznego wersjonowania z moimi .NET Web Site/Application
projektami / rozwiązaniami, Windows Forms, WPD.
Jak to zaimplementować?
Odpowiedzi:
Wygląda na to, że Jeff używa CruiseControl.NET w oparciu o przeglądanie transkrypcji 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 ma miejsce wstawianie?
Robimy to z xUnit.net dla naszych automatycznych kompilacji. Używamy CruiseControl.net
(i wypróbowujemy TeamCity). Zadanie programu MSBuild, które uruchamiamy w celu ciągłej integracji, automatycznie zmienia numer kompilacji za nas, więc wynikowy plik kompilacji ZIP zawiera odpowiednio wersjonowany zestaw bibliotek DLL i EXE.
Nasz plik MSBuild zawiera odniesienie do UsingTask dla biblioteki DLL, która zastępuje wyrażenia regularne: (możesz używać tej biblioteki DLL, ponieważ jest ona również objęta licencją MS-PL)
<UsingTask AssemblyFile = "3rdParty \ CodePlex.MSBuildTasks.dll" TaskName = "CodePlex.MSBuildTasks.RegexReplace" />
Następnie wyodrębniamy numer kompilacji, który jest automatycznie dostarczany przez system CI. Jeśli chcesz, możesz również poprosić dostawcę kontroli źródła o podanie numeru wersji źródła, ale okazało się, że numer kompilacji w systemie CI jest bardziej przydatny, ponieważ nie tylko można zobaczyć wyniki integracji według numeru kompilacji CI, który również zapewnia łącze z powrotem do zestawu zmian, które zostały uwzględnione w kompilacji.
<! - Kaskadowe próby znalezienia numeru kompilacji -> <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, który pochodzi z TeamCity, a następnie ccnetlabel, który pochodzi z CC.net, a jeśli żadne z nich nie jest obecne, domyślnie ustawiamy 0, abyśmy mogli ręcznie przetestować automatyczny skrypt kompilacji).
Następnie mamy zadanie, które ustawia numer kompilacji w pliku GlobalAssemblyInfo.cs, który łączymy ze wszystkimi naszymi projektami:
<Target Name = "SetVersionNumber"> <RegexReplace Pattern = 'AssemblyVersion \ ("(\ d + \. \ D + \. \ D +) \. \ D +" \)' Replace = 'AssemblyVersion ("$ 1. $ (BuildNumber)")' Files = „GlobalAssemblyInfo.cs” /> <Exec Command = "attribute -r xunit.installer \ App.manifest" /> </Target>
To znajduje atrybut AssemblyVersion i zastępuje numer wersji abcd abcBuildNumber. Zwykle zostawiamy źródło zaznaczone w drzewie z ustalonymi pierwszymi trzema częściami numeru budującego, a czwartą ustawioną na zero (np. Dzisiaj jest to 1.0.2.0).
W procesie kompilacji upewnij się, że zadanie SetVersionNumber poprzedza zadanie kompilacji. Na koniec używamy naszego zadania Zip, aby spakować wyniki kompilacji, abyśmy mieli historię plików binarnych dla każdej automatycznej kompilacji.
Możesz to zrobić, dodając następujące elementy w dowolnym miejscu kodu
$Id:$
Na przykład @Jeff zrobił:
<div id="svnrevision">svn revision: $Id:$</div>
a po zameldowaniu serwer zastąpił $ Id: $ aktualnym numerem wersji. Znalazłem również to odniesienie .
Jest też $ Data: $ , $ Wersja: $ , $ Wersja: $
Jeśli używasz ASP.Net MVC
(tak jak robi to StackOverflow), napisałem łatwy do wykonania 3-stopniowy przewodnik, jak automatycznie pobrać i wyświetlić najnowszą wersję SVN . Przewodnik został zainspirowany myśleniem o tym właśnie pytaniu! : o)
@Balloon Jeśli używasz TortoiseSVN, możesz użyć pakietu programu SubWCRev . Pyta o kopię roboczą i podaje tylko najwyższy numer wersji. Wprawdzie wydaje się, że jest to podejście klienta do problemu po stronie serwera, ale ponieważ jest to fajny program wiersza poleceń, powinieneś być w stanie dość łatwo przechwycić jego dane wyjściowe do użycia.
$rev
a inne podobne są wersjami poszczególnych plików, więc nie zmienią się, dopóki plik się nie zmieni. Numer na stronie to (najprawdopodobniej zakładam tutaj) numer wersji svn dla całego projektu. Różni się to od wersji plików, na które inni wskazywali.
W tym przypadku zakładam, że CCNET pobiera numer wersji projektu i przepisuje część strony internetowej o tym numerze. Każde rozwiązanie CI powinno być w stanie to zrobić, skonfiguruj to samodzielnie za pomocą CCNET i Teamcity (chociaż nie strony internetowe, ale automatyczne wersjonowanie wersji wdrożeniowych / montażowych).
Aby to zrobić, użyj rozwiązania CI, które je obsługuje, lub użyj procesu kompilacji (MSbuild / Nant) do przechowywania tej wersji i zapisania jej w plikach przed jej „wdrożeniem”.
Aby dodać do odpowiedzi @ BradWilson: „Jeśli chcesz, możesz również poprosić swojego dostawcę kontroli źródła o podanie numeru wersji źródła”
Aby połączyć Subversion i MSBuild: Projekt zadań społeczności MSBuild