NeatCQRSLite raport 2 – Continuous Delivery

Witajcie
Prze ostatni tydzień nie było czasu na blogowanie, ale już nadrabiamy z Ignacym zaległości. Czas na podsumowanie zmagań z ostatniego tygodnia. Dzisiaj będzie o pakowaniem projektów do paczek nuget przy użyciu Continuous Delivery (CD) na AppVeyor.

Paczki NuGet

O ile korzystanie z paczek jest NuGet jest przyjemne, integracja z Visual Studio jest świetna, o tyle proces ich tworzenia kuleje. Visual studio nie udostępnia nam bezpośredniego dostępu do nuget.exe, udostępnia nam cmdlety do instalacji czy przywracania paczek, ale braknie już cmdletów pokrywających polecenia nuget.exe pack i nuget.exe spec, które są odpowiedzialne za stworzenie konfiguracji paczki i samego pakowania. Trochę boli też fakt, że artykuły z dobrymi praktykami o pakowaniu i utrzymaniu całości ze środowiskiem continuous delivery są mało dostępne. Na szczęście jest światełko w tunelu, w nowym VS i MsBuild ma być pełna integracja http://blog.nuget.org/20170316/NuGet-now-fully-integrated-into-MSBuild.html.

NuProj

Do rozwiązania problemu na pierwszy ogień wziąłem wtyczkę NuProj; fajna sprawa; dodaje nam do visual studio nowy typ projektu .nuproj, w którym można ustawiać właściwości paczki. W projekcie dodajemy referencje do projektów które mają być spakowane, a jeżeli paczka ma mieć zależności do innej paczki budowanej w tej solucji to dodajemy referencje do projektu nuproj odpowiedzialnego za budowanie drugiej paczki. Można też wybrać czy dołączany projekt ma być biblioteką, analizatorem, czy narzędziem. Po prostu cud miód. Oczywiście cały nuproj jest kompatybilny z msbuild i można budować paczki na serwerze continuous delivery bez instalowania tam wtyczek, wystarczy trochę pogrzebać w pliku nuproj. No i tutaj zaczynają się schody, cały nurpoj to jeden wielki XML do msbuilda i część dokumentacji każe użytkownikowi bezpośrednio w nim grzebać  np. aby ustawić numerowania paczek na podstawie assembly info. Rozumiem że nie wszystko musi dać się zrobić z GUI i czasem trzeba zakasać rękawy i bezpośrednio edytować pliki projektów. Było by o wiele lepiej gdyby dokumentacja zawierała pełny opis jak to zrobić, a nie zakładała że użyszkodnik z czymś już sobie poradził i napisał kawałem kodu msbuilda który pobiera numer wersji z assembly info, ale tylko potrzebuje tym numerkiem podzielić się z nuspecem. Szkoda że dobre projekty ogranicza słaba dokumentacja.

NuSpec

Po wojowaniu z NuProj i próbą rozgryzienia msbuilda i odczytywaniu numeracji wersji z assembly info, poddałem się, była to dla mnie bariera nie do przejścia, więc przesiadłem się do zwykłych plików .nuspec. Jest to oryginalny sposób pakowania paczek nuget, niestety wymaga on dostępu do komendy nuget.exe, do której nie ma dostępu z visual studio. Całe szczęście AppVeyor automatycznie wyszukuje w projekcie pliki nuspec, pakuje je i sam zbiera artefakty.

Continuous Delivery

Do tej pory na kole naukowym używałem teamcity, całkiem fajnie się z nim pracuje, jednak trzeba ogarnąć proces budowania projektu z konsoli. To nie tak że tam to nie działa automagicznie, ale proces budowania i deployu działa lepiej z konsoli. Serwer kołowy odstawmy na bok, ważne że nie znałem serwisów, które oferują CD dla projektów open source. Wybrałem się na mały zwiad po popularnych bibliotekach .NET na githubie, większość z nich używała serwisu AppVeyor, kilka kliknięć i jestem zarejestrowany i już wszystko działa, kilka kolejnych aby całość skonfigurować pod siebie. Trochę przejrzałem dokumentacji; muszę przyznać że jest solidna; dowiedziałem się tam że konfigurację można przenieść do pliku .yml, który będzie siedział sobie na repo. Trochę zajęło mi też rozkminienie jak zarządzać numerowaniem wersji. Wersję możemy ustawiać w nuspec/nuproj, AssemblyInfo.cs, git flow i AppVeyor (wydaje mi się że jeszcze o czymś zapomniałem). Trzeba tylko wykminić jak to połączyć logicznie do kupy. Szkoda że nie natrafiłem na żaden artykuł, który by przedstawił dobre praktyki w tym temacie (ogólnie artykułów na temat konfiguracji CD jest jak na lekarstwo). Ostatecznie zdecydowałem się na numerację buildów zarządzaną przez AppVeyor wraz z paczowaniem AssemblyInfo.cs, z którego nuspec pobiera wersję.

Roadmap

W tym tygodniu:

  • Napiszę wiki o używaniu frameworku
  • Posprzątam repozytorium, pododaje licencje i readme
  • No i oczywiście czas na pierwszy release

One Pingback/Trackback

    26 March 2017 at 9:03am
    NeatCQRSLite raport 2 – Continuous Delivery – neatcode Dziękujemy ...
  • dotnetomaniak.pl