NuGet Package Management nu ook mogelijk in VSTS
Als softwareontwikkelaar werk je vaak aan grote en complexe systemen. Naar eer en geweten zet je, samen met je collega’s, deze system zo goed mogelijk op met de juiste architectuur om zo de software goed onderhoudbaar te houden. Dan zijn er altijd een aantal vragen die terugkomen. Eén daarvan is: Hoe gaan we om met shared code?
Shared code die in een aparte assembly zit om precies te zijn. Dit kunnen bijvoorbeeld common class lib, frameworks of componenten zijn. De vraag is hoe je deze assemblies kan delen. Om deze problematiek op te lossen is NuGet ontwikkeld. NuGet is een package manager voor het Microsoft development platform om packages te creëren van één of meerdere assemblies en deze te publiceren zodat andere projecten deze kunnen consumeren.
Voor componenten van derden kan je al een tijd met de NuGet Package Manager in Visual Studio componenten opzoeken. In de configuratie kan bepaald worden welke versie van het package in het project gebruikt gaat worden.
Voor de eigen shared assemblies kunnen ook NuGet Packages gecreëerd worden, maar die wil je niet altijd in de public toegankelijke NuGet servers publiceren. Nu kan je als bedrijf een eigen NuGet server opzetten. Dit werkt prima maar vergt best wat moeite. De inrichten van de NuGet server, het aanpassen van de Build Defenitions zodat de packages gebouwd en gepubliceerd worden tijdens de Team Build en het configureren van development- en build machines zodat ze de eigen NuGet server kunnen gebruiken om packages te herstellen.
Dit kan nu veel eenvoudiger door in Visual Studio Team Services (VSTS) deze functionaliteit toe te voegen. Binnen een paar minuten het je een eigen NuGet server in de lucht.
Om Package Management toe te voegen aan VSTS kan je deze installeren vanuit de Marketplace. In de VSTS portal klik je op het icoontje van de Marketplace naast het icoontje voor de admin pagina en kies voor Browse the Marketplace.
Onder “Build and Release” kan je de Package Management extension vinden. Nadat je doorgeklikt hebt kan je de extension installeren in je VSTS account. Na de installatie is de Package Management extension te zien in de Extensions tab van de DefaultCollection admin pagina. In de basis is je eigen NeGet server gereed.
NB. Het toevoegen van extension is nog niet mogelijk in TFS on-premise.
Om vervolgens je eigen NuGet packages te publiceren moet je eerst een Feed aanmaken. Dit doe je in een Team Project. Onder alle projecten is nu nieuw item Package toegevoegd.
Klik op New feed om een nieuwe feed aan te maken. Geef de feed een naam en beschrijving.
Tevens kan je instellen wie de feed kan lezen en wie er naar de feed kan publiceren.
Lezen kan door Team Project members of door iedereen die toegang heeft toe de VSTS account. Voor het publiceren kan er gekozen worden om Team Project leden en/of de Project Collection Build Service toegang te geven. Door geen van beide contribute rechten te geven maak je de feed readonly. Deze instellingen zijn later altijd nog aan te passen.
Hiermee is de feed klaar voor gebruik.
Maar hoe krijg je nu je eigen NuGet packages in de feed?
Als de teamleden rechten hebben om te publiceren kunnen ze dat handmatig doen met de NuGet executable. Maar het kan ook geregeld worden in de nieuwe build in VSTS.
Er zijn drie NuGet Tasks die in een build gebruikt kunnen worden.
Met de NuGet Packager kan op basis van een .nuspec bestand een package gegenereerd worden. In dit .nuspec bestand beschrijft het package en kan aangemaakt worden met de NuGet executable.
De NuGet Publisher Task kan vervolgens de gegenereerde packages oppakken en publiceren maar de eerder aangemaakte feed. Kies voor Internal NuGet en vul de Internal feed URL in. Hoe deze URL eruit ziet kan je gelukkig via de link Connect to feed in het Package gedeelte terugvinden. Voor een uitgebreide uitleg kan je doorklikken naar de online documentatie van Visual Studio.
In een volgend artikel zal ik dieper in gaan op de specificatie van de NuGet packages en hoe je deze vanuit de build kan aanpassen.
Mark van den Berg