Zautomatyzowana platforma kompilacji dla portfolio .NET - najlepszy wybór? [Zamknięte]

10

Zajmuję się utrzymywaniem dość dużego portfolio aplikacji .NET. W portfolio znajdują się również starsze aplikacje zbudowane na innych platformach - natywnym C ++, formularzach ECLIPS itp.

Mam teraz kompleksową strukturę kompilacji nad NAnt, która zarządza kompilacjami dla wszystkich tych aplikacji. Struktura kompilacji wykorzystuje NAnt do robienia wielu różnych rzeczy:

  • Wyciągnij kod z Subversion, a także utwórz tagi w Subversion
  • Zbuduj kod, używając MSBuild dla platformy .NET lub innych kompilatorów dla innych platform
  • Zajrzyj do plików AssemblyInfo, aby zwiększyć numery wersji
  • Usuwa niektóre pliki, które nie powinny być uwzględnione w kompilacjach / wydaniach
  • Zwalnia kod do folderów wdrażania
  • Zamyka kod w celu utworzenia kopii zapasowej
  • Wdróż usługi Windows; zacznij i zatrzymaj ich
  • Itp.

Większość tych rzeczy można zrobić za pomocą samego NAnt, ale stworzyliśmy kilka zadań rozszerzających dla NAnt, aby wykonać pewne czynności specyficzne dla naszego środowiska. Ponadto większość powyższych procesów jest uogólniona i ponownie wykorzystywana w wielu różnych skryptach kompilacji aplikacji, dzięki czemu nie powtarzamy logiki. Więc to nie jest prosty kod NAnt i nie są to proste skrypty budowania. Istnieją dziesiątki plików NAnt, które łączą się, aby wykonać kompilację.

Ostatnio byłem niezadowolony z NAnt z kilku powodów: (1) jego składnia jest po prostu okropna - języki programowania nad XML są naprawdę przerażające w utrzymaniu, (2) projekt wydaje się umrzeć na winorośli; ostatnio nie było wielu aktualizacji i wygląda na to, że tak naprawdę nikt nie stoi na czele. Próba uruchomienia go z .NET 4 spowodowała pewne problemy z powodu tego braku aktywności.

Tak więc, mając na uwadze całe to tło, oto moje pytanie. Biorąc pod uwagę niektóre rzeczy, które chcę osiągnąć na podstawie powyższej listy i biorąc pod uwagę, że jestem przede wszystkim w sklepie .NET, ale muszę również budować projekty inne niż .NET, czy istnieje alternatywa dla NAnt, którą powinienem rozważyć przełączać na?

Rzeczy na moim radarze to Powershell (z lub bez psake ), MSBuild sam i rake . Wszystkie mają zalety i wady. Na przykład, czy MSBuild jest wystarczająco wydajny? Pamiętam, jak go używałam wiele lat temu i wydawało się, że nie ma on tak dużej mocy jak NAnt. Czy naprawdę chcę, aby mój zespół uczył się języka Ruby tylko po to, aby tworzyć kompilacje przy użyciu prowizji? Czy psake naprawdę jest wystarczająco dojrzały, aby przypiąć moje portfolio? Czy Powershell jest „zbyt blisko metalu” i skończę z pisaniem własnej biblioteki kompilacji podobnej do psake, aby używać go samodzielnie?

Czy są inne narzędzia, które powinienem rozważyć? Gdybyś był zaangażowany w utrzymanie portfela .NET o znacznej złożoności, jakie narzędzie do budowania byś szukał? Z czego obecnie korzysta Twój zespół?

RationalGeek
źródło

Odpowiedzi:

2

Jeśli już korzystasz z TeamCity, powinieneś być w stanie korzystać z jego istniejących funkcji do większości potrzebnych rzeczy. Natywnie obsługuje tworzenie plików Visual Studio .sln, a jeśli potrzebujesz dodatkowych rzeczy wykonanych we wszystkich swoich projektach, możesz modyfikować pliki .targets .NET Framework na twoich komputerach, więc nie musisz zmieniać pojedynczych plików csproj.

Automatycznie pobierze z Subversion, zip artefakty, pozwoli ci kontrolować, które pliki są uważane za artefakty do wdrożenia. Nowa wersja (6.0) pozwala również na wiele kroków kompilacji, więc istnieje możliwość wdrożenia artefaktów w udziale za pomocą xcopy.

Możesz także pisać własne aplikacje / zadania, które można uruchamiać w ramach kompilacji (za pomocą programu uruchamiającego z wiersza poleceń) i wykonywać dowolne czynności (takie jak uruchamianie / zatrzymywanie procesów systemu Windows).

Adam Lear
źródło
3

Podchodzimy do rzeczy jako do trzech różnych działań: Kompilacji, Wdrażania i Instalacji. Używamy TFS dla serwera kompilacji z kilkoma objaśnieniami do Powershell. Następnie używamy Powershell, aby wykonać wszystkie etapy wdrażania i instalacji, które są dość złożone i obejmują wiele serwerów, zarówno lokalnych, jak i chmurowych. Byłem bardzo zadowolony z nauki Powershell nad MSBuild lub innym narzędziem. W przeszłości miałem również dobre doświadczenia z Visual Build.

Matt McQ
źródło
2

Spójrz na hudson i MSBuild jako parę. Moc pochodzi z silnych możliwości MSBuild i wtyczek Hudsona .

Na przykład możesz użyć hudsona i uruchamiać skrypty NAnt, dopóki nie przeprowadzisz migracji do MSBuild, a następnie będzie można uruchomić również skrypty MSBuild.

W szczególności odnosząc się do swoich punktów:

  • Subversion i tagowanie
  • MSBuild
  • Zerknięcie do AssemblyInfo zostało poproszone na SO, ale rozwiązanie może nie odpowiadać twoim upodobaniom
  • MSBuild może z łatwością usuwać pliki
  • „Kod wydania do folderów wdrażania” - system kompilacji może pominąć ten krok i wdrożyć go automatycznie przy użyciu wielu metod. Lub możesz FTP, jeśli chcesz.
  • MSBuild może zip
  • Usługi Windows, ponownie MSBuild jest tu twoim przyjacielem.
Steven Evers
źródło
Dzięki za informacje na temat MSBuild. Wygląda na to, że jest tam więcej mocy niż ostatnim razem, gdy próbowałem jej użyć. Jeśli chodzi o Hudson, czy zapewnia to korzyści wykraczające poza to, co zapewniają inne serwery CI, takie jak TeamCity, z którego obecnie korzystamy? Staram się unikać nadmiernego naruszania obecnego stanu rzeczy, a wymiana naszego serwera CI w tym samym czasie, gdy zastępujemy nasze skrypty kompilacji, wydaje się bardziej bolesna.
RationalGeek
Moim skromnym zdaniem uważam, że TeamCity jest fantastyczny ... a Hudson jest lepszy. Widać, że wykonują te same funkcje, dopóki nie chcesz zrobić czegoś niesamowitego - wtedy wygrywa Hudson. Szczerze mówiąc, Hudson może analizować (stylecop / fxcop) -> build-> test-> tag-> lokalna i zewnętrzna kopia zapasowa-> wdrożyć, utrzymując Cię na bieżąco przez RSS, SMS, XFD.
Steven Evers,
Hmm ... nic z tej listy nie jest niemożliwe z TeamCity, ale być może łatwiej z Hudsonem. Tak czy inaczej, chyba że osiągniemy punkty bólu z TC, nie sądzę, że zmienimy się w najbliższym czasie.
RationalGeek
@jkohlhepp: Trudność polega na tym, że istnieje wiele rozwiązań w tej samej przestrzeni. Pod koniec dnia Hudson jest łatwy i jest w 100% darmowy. IIRC, jedna rzecz, którą TC może mieć w Hudson, to budowanie wielu agentów.
Steven Evers
2

Używam Automated Build Studio . Chcę się tego pozbyć.

Jedynym powodem, dla którego nie przełączam się na 100% MS Build lub Team Foundation Build, jest koszt związany z odbudową skryptów, które działają dzisiaj doskonale. Skrypty niewiele się zmieniają ...

Jednak w przypadku następnego produktu będzie to Team Foundation Build bez wahania z następujących głównych powodów (jest ich o wiele więcej):

  • Jest łatwy do wdrożenia (najnowsza wersja: 2010)
  • Jest w pełni zintegrowany z Visual Studio i Team Foundation Server
  • Staje się standardem jak MS Build
  • Jest darmowy z Bizspark (dla startupów)

Ponieważ jesteś również w .NET, gorąco polecam korzystanie z TFB.

Jeśli nie możesz ubiegać się o Bizspark lub nie stać Cię na zakup licencji, możesz wybrać CruiseControl.NET + MS Build i kilka skryptów pomocniczych. W dużej firmie użyteczności publicznej, w której pracowałem, użyliśmy CruiseControl.NET do budowy, testowania, wdrażania i raportowania wszystkich naszych projektów. Obejmowało automatyczne wdrożenie usługi internetowej.


źródło
Nie rozważałem tej opcji, ale nie sądzę, aby była to dla nas realistyczna opcja, ponieważ w ogóle nie korzystamy z TFS i zawetowaliśmy próby przejścia na nią w przeszłości (z powodów budżetowych i innych). Ale dziękuję za sugestię, która jest interesującym pomysłem.
RationalGeek
To nie jest tak ekspansywne. Jeśli twoje zarządzanie jest wrażliwe na cenę, MS Build będzie idealnie pasował. Pracowałem tylko z MS Build + CruiseControl.NET i działało to świetnie! Dodam to w mojej odpowiedzi.
@Pierre 303: Dla ciekawości, dlaczego chcesz pozbyć się Automated Build Studio?
RationalGeek
@Pierre 303: Koszt TFS nie jest jedynym problemem. Mój sklep jest częścią większego przedsiębiorstwa, które ustandaryzowały Subversion i inne narzędzia, a bycie „niestandardowym” i korzystanie z TFS powoduje problemy polityczne.
RationalGeek
@jkohlhepp: nie jest łatwy w użyciu, nie jest dobrze zintegrowany z Visual Studio (przynajmniej wersja, którą mam) i jest daleki od bycia standardem.
2

FinalBuilder może wykonać wszystkie wymagane czynności, z ładnym graficznym interfejsem użytkownika i aplikacją serwera konstruktora, która jest dodawana za darmo.

Matt
źródło
2

Obecnie robię to, co robisz (tj. Od kompilacji do pakowania do wdrożenia) za pomocą MSBuild (> 3000 linii skryptów). CI używa CruiseControl.Net i mam nadzieję, że w przyszłości mogę przejść do TeamBuild. MSBuild jest uciążliwy (programowanie w języku XML), ale jest dość potężny, szczególnie w przetwarzaniu wsadowym i śledzeniu zależności. Jest aktywnie utrzymywany i ulepszany w nowych wersjach .Net i stanowi podstawę systemu kompilacji w Visual Studio i TFS. Również pliki projektów Visual Studio są w rzeczywistości projektami MSBuild i mogę podłączyć się do różnych punktów rozszerzeń. Pakiet rozszerzenia MSBuildma wiele dodatkowych zadań i programowo można łatwo tworzyć własne zadania. Proponuję poważnie przemyśleć MSBuild. Ostatnio uczę się również programu PowerShell i łatwo jest mi wykonywać niektóre zadania, szczególnie na etapie wdrażania, takie jak instalowanie i konfigurowanie certyfikatów, usług IIS itp.

Edytuj projekt MSBuild w VisualStudio, ponieważ rozumie on składnię i daje intellisense. Oto kilka innych dobrych narzędzi, które pomogą w MSBuild.
MSBuild Launch Pad - dla rozszerzeń powłoki
MSBuild SideKicks - Graficzna edycja, wykonywanie i debugowanie skryptów.

softveda
źródło
1

Być może wymagasz zbyt wiele skryptu kompilacji, a za mało serwera kompilacji - dzięki Team City możesz łatwo mieć proste skrypty, które wykonają każdy z twoich pocisków, w dowolnym języku lub stosie, który ma sens i użyj zadań budowania TeamCity, aby w razie potrzeby połącz łańcuchy.

Wyatt Barnett
źródło
Wygląda na to, że większość tych odpowiedzi utożsamia CI ze skryptami kompilacji. Zawsze uważałem skrypty kompilacji za inteligentne, a serwer CI był tym, który po prostu uruchamia kompilacje na podstawie wyzwalaczy. Ale może masz rację i muszę to przemyśleć.
RationalGeek
1

Zdecydowanie polecam TeamCity, jest łatwy w konfiguracji i konfiguracji. MSBuild jest lepszy od NAnt z tego prostego powodu, że wszystkie pliki projektu / rozwiązania w wersji vs2008 / 2010 są technicznie plikami MSBuild, ale TeamCity można skonfigurować za pomocą MSBuild lub NAnt.

Oczywiście, TeamCity będzie cię kosztować. Osobiście dałem wybór, by wybrać rake, po prostu dlatego, że tarcie za pomocą narzędzi Ruby w porównaniu do innych, chociaż psake jest również dobrym kandydatem.

Srikanth Remani
źródło
1
FYI TeamCity jest bezpłatne, jeśli masz mniej niż 20 konfiguracji kompilacji i mniej niż 20 użytkowników. Ponadto, jeśli jesteś projektem typu open source, możesz złożyć do nich wniosek o bezpłatną nieograniczoną licencję.
RationalGeek
0

Czy zastanawiałeś się nad Hudsonem ? Może to być kłopotliwe, ponieważ wymaga uruchomienia serwera aplikacji Java, ale myślę, że może pozwolić ci na użycie twojego obecnego skryptu NAnt i zbudowanie go przy użyciu innych narzędzi.

Mchl
źródło
Hudson jest platformą ciągłej integracji, a nie platformą kompilacji. Posiadamy serwer CI - TeamCity, który działa dobrze z NAnt. Jednak powody, dla których chcę zastąpić NAnt, są takie, że utrzymanie skryptów NAnt jest bolesne. Korzystanie z bieżących skryptów za pośrednictwem Hudsona nie rozwiązuje tego problemu. Dziękuję za sugestię.
RationalGeek
IMHO Hudson jest bardzo ograniczony w tym, co robi poprawnie z projektami VS. Kasy nie są powiązane z zestawami zmian w sposób, jakiego oczekujesz, i za kulisami nie robi nic poza uruchomieniem pliku wsadowego utworzonego za pomocą interfejsu internetowego i wielu wtyczek. Zgłaszanie tego jest miłe, jeśli możesz sprawić, by działało dobrze.
Bill