Wir haben uns Appveyor als Build-Server für Continuous Integration angeschaut. Die Nuget-Kommandozeile bietet Potential zur Automatisierung. In diesem Artikel sehen wir uns an, wie Appveyor automatisch die Pakete veröffentlicht.

Voraussetzung

Damit wir Nuget einrichten können, müssen bestimmte Voraussetzungen gegeben sein. Wir brauchen:

  • Ein Projekt, welches Nuget-Pakete erzeugt (Artikel)
  • Eine Verknüpfung mit AppVeyor (Artikel)

Wenn diese Voraussetzungen gegeben sind, können wir fortfahren 🙂

Appveyor einrichten

Zuerst öffnen wir die Einstellungen vom Projekt. Dies kann direkt über die Projektübersicht geschehen. Alternativ gibt es den Tab „Settings“ nachdem das Projekt ausgewählt wurde. Anschließend wählen wir „Deployment“.

Öffnen der Projekteinstellungen via Projektübersicht in Appveyor
Öffnen der Projekteinstellungen via Projektübersicht in Appveyor

"Deployment" Einstellungen des Projekts öffnen
„Deployment“ Einstellungen des Projekts öffnen

Dieses Menü ermöglicht verschiedenste Veröffentlichung. Es gibt viele Provider wie FTP, AWS oder SQL-Datenbanken. Es können auch eigene Scripts hinterlegt werden.

In unserem Falle möchten wir die Nuget-Pakete veröffentlichen und wählen im Menü „Nuget“ aus. Die Oberfläche aktualisiert sich.
Die wichtigsten Felder sind „NuGet server URL“ und „API key“.
Falls ihr die Pakete auf Nuget.org veröffentlichen wollt, kann die URL leer bleiben. Im Standard werden Pakete immer auf Nuget.org veröffentlicht.

Vorgehen, um Nuget-Pakete zu veröffentlichen
Vorgehen, um Nuget-Pakete zu veröffentlichen

Der API Key dient zur Authentifizierung, damit Pakete angelegt bzw. veröffentlicht werden dürfen. Abschließend speichern wir die Einstellungen. Mehr Schritte sind nicht notwendig.

Dadurch, dass Nuget aktiviert wurde, scannt der Buildserver nach Abschluss eines Builds auf *.nupkg-Dateien im Verzeichnis. Wurden welche gefunden, werden diese automatisch veröffentlicht. Das könnt ihr auch im Build-Log sehen. Nachfolgend seht ihr einen Auszug:

Collecting artifacts...
Found artifact 'Testprojekt\bin\Release\Testprojekt.1.0.0.nupkg' matching '**\*.nupkg' path
Uploading artifacts...
[1/1] Testprojekt\bin\Release\Testprojekt.1.0.0.nupkg (1,000 bytes)...100%
Deploying using NuGet provider
Publishing Testprojekt.1.0.0.nupkg to https://www.nuget.org/api/v2/package...OK
Total packages published: 1
Build success

Sehr praktisch ist dabei, dass AppVeyor automatisch auf „doppelte“ Pakete prüft. Das bedeutet, dass Pakete, welche bereits veröffentlicht wurden, nicht nochmal veröffentlich werden. Damit gibt es beim Buildprozess keinen Fehler.

Wenn ihr nuget push verwendet und ein bereits erstelltes Paket nochmal veröffentlicht, erhaltet ihr eine Fehlermeldung. Je nach Buildserver wird der gesamte Buildprozess als fehlerhaft markiert, obwohl alle anderen Schritte (z.B. kompilieren und die Testausführung) korrekt waren.

Das müsst ihr einfach ausprobieren. Nach meiner Erfahrung gibt es leider kein einheitliches Vorgehen.

Zusammenfassung

Ihr hab gesehen, wie schnell die Pakete automatisch veröffentlich werden können. Damit ist das Veröffentlichen usw. unabhängig von einem einzelnen Entwickler. Zudem kann das ganze Team neue Versionen ohne Stress bereitstellen. Ihr müsst nur eure Versionsnummer hochzählen 🙂

Wie ist eure Meinung oder Erfahrung zur automatischen Bereitstellung von Nuget-Paketen via Buildserver?


Bildquelle: Pixabay.com