Za svoju kariéru som sa stretol s rôznym spôsobom ako buldovať dotnetovské projekty, od použitia Visual Studia, cez .bat súbory, Powershell a nakoniec som skončil pri build automation tooloch (konkrétne Cake a Nuke).
Späť by som sa už nevrátil. Prečo? Lebo tieto nástroje šetria čas a nervy.
Pri vytvorení artefaktov projektu nejde len o to niečo skompilovať, treba s tým spraviť plno iných drobných vecí. To zahŕňa odstránenie starých artefaktov, kompiláciu závislých projektov, podpísanie binárok, konverziu dokumentácie do vhodného formátu, pridanie ďalších súborov do projektu (licencie, vygenerované SQL migrácie, konfiguráciu,…) a nakoniec vytvorenie balíčkov pre inštaláciu (zip, msi, deb,…) a nezabudnúť ju správne pomenovať.
K tomu celému je často v projekte viac výsledných inštalačných balíkov a nugetov. Taktiež je pred tým potrebné pustiť unit testy, či zaistiť rozdielne správanie pre release a prerelease build.
A práve tieto úlohy dokáže automatizovať build automation tool. Nie je to kompilátor, je o úroveň vyššie.
Znázornenie závislostí medzi úlohami - NUKE (zdroj).
… pre .NET (aj v porovnaní so štandardami CI/CD pipelinami):
V podstate celý proces buildovania (vrátane testov a uploadu artefaktov) sme presunuli z „ručnej roboty“ alebo YAML-u do programu, ktorému rozumieme.
Cake (C# Make) a NUKE sú oba build automation tooly pre .NET a MS Build. Oba viac menej dokážu to isté a podobným spôsobom.
Čo majú spoločné:
Čo majú rozdielne:
Stránka | https://cakebuild.net/ |
Ako začať | https://cakebuild.net/docs/getting-started/setting-up-a-new-scripting-project |
Github | https://github.com/cake-build/cake |
Integrácia na treťostranné baličky | https://cakebuild.net/extensions/ |
Ukážka použitia | https://github.com/harrison314/PkcsExtensions/blob/master/build/build.cake |
Stránka | https://nuke.build/ |
Ako začať | https://nuke.build/docs/getting-started/installation/ |
Github | https://github.com/nuke-build/nuke |
Integrácia na treťostranné baličky | https://nuke.build/docs/common/cli-tools/ |
Ukážka použitia | https://github.com/harrison314/Area52/blob/main/build/BuildProject/Build.cs |
Typický príklad použitia týchto nástrojov je, že pri release builde sa spustia unit testy, do buildu sa vrazí git komit a nejaké premenné prostredia, výsledok sa zozipuje, dopíše sa verzia a niekde sa uploadne artefakt. Na čo bohate stačia oba tieto nástroje.
Oba tieto tooly sú dobré a dokážu podobné veci trochu iným prístupom. Čokoľvek, čo ide spraviť v C# ide spraviť aj pomocou týchto nástrojov.
NUKE je viac deklaratívne, tým ma človek ľahší začiatok a pokiaľ netreba naozaj špeciálne veci tak bohate stačí. Taktiež je príjemné mať intellisense vďaka tomu, že ide o konzolovú aplikáciu v rámci solution.
Cake je viac imperatívne, osobne ho používam o dosť dlhšie a možno aj pre to mi príde trochu univerzálnejšie, navyše vyhráva v počte integrácii na treťostranné služby a programy.
Myslím, že keď si človek vyberie hociktorý nástroj (Cake, NUKE), tak na začiatku nespraví chybu. Navyše kód pre build automation nebýva dlhý, tak to ide ľahko prepísať.
A ako som spomínal, už len samotné použitie takéhoto nástroja šetrí čas a nervy.
Osobne mi tieto nástroje priniesli hlavne to, že si viem buildy rýchlo odladiť lokálne. A keď som na dovolenke, tak mi nemusí nik volať ohľadom buidlovania knižnice XY, ktorú nutne potrebuje na vyriešenie bugu.