wake-up-neo.com

Machen Sie Jenkins auf die sichere Paketquelle von NuGet aufmerksam

Ich habe ein kleines Problem bezüglich der Wiederherstellung von Jenkins und NuGet-Paketen. 

Was ich versuche zu tun, ist, Lösungen auf Jenkins zu bauen (was perfekt funktioniert). Ich habe die Paketwiederherstellung für die Lösung aktiviert, die den .nuget-Ordner mit NuGet.exe, NuGet.Config und NuGet.targets enthält.

Bei Jenkins baue ich einige Projekte als NuGet-Pakete in einer privaten Paketquelle auf unserem Server auf. Ich verwende diese Pakete in anderen Projekten, die auf jenkins selbst aufbauen sollten.

VS kennt die Quelle des privaten Pakets, es ist in der globalen NuGet.Config-Datei (die unter AppData) konfiguriert und ist (standardmäßig) nicht deaktiviert.

Wenn ich jetzt versuche, eine Lösung zu erstellen, die ein Paket aus der Quelle des privaten Pakets benötigt, schlägt der Build fehl, da Jenkins dies nicht weiß und daher beim Wiederherstellen von Paketen, die nicht ersetzt werden, einen leeren -source- Parameter festschreibt jenkins kennt die benutzerdefinierte Quelle nicht.

Was ich bisher versucht habe

  1. Ich weiß bereits, dass das Hinzufügen der privaten Quelle zu den Lösungen NuGet.Config- oder NuGet.Targets-Datei Package-Source das Problem lösen würde, aber das würde bedeuten, dass ich dies für jede Lösung tun muss, die ich mit Jenkins erstellen möchte.

  2. Ich habe auch ein bisschen mit den Config-Dateien in AppData und ProgramData herumgespielt, indem ich die Quelle in die Paket-Quell-Tags in den Dateien eingefügt habe und sie sogar zur aktiven Quelle gemacht habe, aber das hat auch nicht geholfen

  3. natürlich wäre das Festschreiben der Pakete eine Problemumgehung, aber das ist nicht das gewünschte Ergebnis, da wir die Pakete in scm ignorieren möchten.

Grundsätzlich möchte ich wissen, ob es eine Möglichkeit gibt, Jenkins ständig über die Quelle des privaten Pakets zu informieren oder die NuGet-Installationen auf den Entwicklermaschinen so zu manipulieren, dass sie eine NuGet.targets- Datei erzeugen, die das private Paket enthält. Quelle. Ein anderer möglicher Fix wäre ein Parameter für msbuild, den ich nicht kenne.

Jede Hilfe wird sehr geschätzt!

16
nozzleman

Meine Kommentare zusammenfassen (und erweitern):

Die Wiederherstellung des Nuget-Pakets über msbuild ist in aktuellen Nuget-Versionen (2.7 und höher) nicht mehr empfohlen.

Wir verwenden einen Batch-Schritt in Jenkins

nuget.exe restore SOLUTIONTOBUILD.sln -source http://nugetserver...

und vermeiden Sie dabei das Problem, dass der Jenkins-Dienst in einem anderen Konto ausgeführt wird und an einem anderen Ort nach der .config sucht.

Auf den Entwicklercomputern werden die Pakete vom Nuget-VS-Addin (und nicht von msbuild) wiederhergestellt. Vergessen Sie daher nicht, die Änderungen rückgängig zu machen, die das alte Nuget-VS-Addin möglicherweise auf Ihre Projektdateien angewendet hat.

Weitere Informationen finden Sie in den Nuget-Docs

21
frank koch

Eine andere Lösung für dieses Problem besteht darin, Ihre benutzerdefinierte NuGet.config und ausführbare Datei zu einem Verzeichnis auf dem Jenkins-Server hinzuzufügen und einen Erstellungsschritt hinzuzufügen, um Nuget mit der benutzerdefinierten Konfiguration auszuführen.

C:\nuget\nuget.exe update "%WORKSPACE%\Project.sln" -ConfigFile C:\nuget\NuGet.config

Eine NuGet.config, die eine benutzerdefinierte Paketquelle hinzufügt, würde in etwa wie folgt aussehen:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <packageRestore>
    <add key="enabled" value="True" />
    <add key="automatic" value="True" />
  </packageRestore>
  <packageSources>
    <add key="nuget.org" value="https://api.nuget.org/v3/index.json" protocolVersion="3" />
    <add key="nuget.org" value="https://www.nuget.org/api/v2/" />
    <add key="My Custom Package Source" value="http://localhost/guestAuth/app/nuget/v1/FeedService.svc/" />
  </packageSources>
  <activePackageSource>
    <add key="nuget.org" value="https://api.nuget.org/v3/index.json" />
  </activePackageSource>
</configuration>

Die Standalone-Datei nuget.exe kann heruntergeladen werden hier

Dieser Ansatz macht es einfacher, benutzerdefinierte Feeds zu allen Ihren jenkins-Jobs hinzuzufügen, indem Sie dieselbe Konfigurationsdatei ändern.

9

[Windows] Stellen Sie sicher, dass das Jenkins-Dienstkonto berechtigt ist, den Speicherort des Nuget-Pakets anzuzeigen. In meinem Fall habe ich ein lokales Administratorkonto verwendet, das nicht über die erforderlichen Domänen-Perms verfügte, um den Netzwerkspeicherort unseres NuGet-Ordners zu durchsuchen. Stellen Sie außerdem sicher, dass die Pakete nicht zu tief verschachtelt sind.

0
daviesdoesit