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ół?