wake-up-neo.com

So erhalten Sie die Wiederherstellung von TFS2015 Build (Build.vnext) und NuGet-Paketen zur Verwendung benutzerdefinierter Paketquellen

Ich versuche, unseren TFS2015 Build ( TFSBuild vnext ) mit VS Team Services zusammenzubringen. 

Bisher waren die meisten Blogs und Dokumentationen hilfreich, außer wenn Sie versuchen, ein Projekt zu erstellen, das benutzerdefinierte Paketquellen für die automatische Wiederherstellung von NuGet-Paketen verwendet.

Ich habe erfolgreich einen Team Services Build Agent (den neuen Mechanismus für Builds) bereitgestellt und alles schien gut zu funktionieren, bis der Build-Task zum Wiederherstellen von NuGet-Paketen fehlgeschlagen ist.

Der Fehler war darauf zurückzuführen, dass die Quelle für benutzerdefinierte/private Pakete nicht von der installierten VS-Konfiguration abgerufen wurde. Daher konnten diese Pakete nicht gefunden werden. Die traditionellen Pakete aus dem standardmäßigen NuGet-Paketfeed wurden ohne Probleme wiederhergestellt.

Wie kann ich zusätzliche Paketquellen angeben, die NuGet bei Verwendung eines Agenten verwenden soll?

BEARBEITEN: vcastro fragte nach dem Build-Schritt des NuGet-Installationsprogramms und dem Definieren von Pfaden in der Konfiguration dieses Build-Schrittes. Das obige verwendet den Schritt in Visual Studio Build und die integrierte Option für NuGet-Wiederherstellungspakete. Verweisen Sie auf dieses Bild als Referenz: http://i.imgur.com/Hrqhhk2.png

23
Jaans

Ich habe mit wenig Erfolg im Web herumgespielt, aber nach dem Fummeln hilft folgendes:

OK Es scheint, dass die für NuGet.config konfigurierten Paketquellen pro Benutzerkonto gespeichert werden, z. 

c:\Users\<<username>>\AppData\Roaming\NuGet\NuGet.config

Mein Problem war schwerer zu lösen, da der Build-Agent als Windows Service unter dem Local System-Konto ausgeführt wurde. Um die NuGet-Konfiguration für den Build zu erhalten, musste ich stattdessen den folgenden Pfad verwenden:

  • 64-Bit Windows C:\Windows\SysWOW64\config\systemprofile\AppData\Roaming\NuGet\NuGet.Config
  • 32-Bit Windows C:\Windows\System32\config\systemprofile\AppData\Roaming\NuGet\NuGet.Config

Möglicherweise müssen Sie über erhöhte Berechtigungen verfügen, um den NuGet Unterordner und NuGet.Config erstellen zu können.

Hinweis: Ich habe keine Lösung für die Verwendung des Local Service-Kontos. Das oben genannte funktioniert nur für das Konto Local System (oder einen tatsächlichen Benutzer).

7
Jaans

Alternativ können Sie auch einen NuGet Installer-Build-Schritt vor dem Visual Studio Build-Schritt Ihrer Build-Konfiguration hinzufügen, um alle NuGet-Pakete wiederherzustellen.

Dort können Sie den Ort Ihres privaten Repos als Argument an nuget.exe übergeben:

-source "https://www.nuget.org/api/v2/;http://mynugetserver"

17
Pascal Berger

Es gibt einen neuen VSTS-Task namens "NuGet Installer", mit dem Sie Ihre NuGet.config-Datei einchecken und die verschiedenen Paketquellen angeben können. Führen Sie diese Aufgabe aus, bevor Sie MSBuild ausführen.

Wenn Sie den VSTS NuGet-Feed verwenden, müssen Sie das Build-Service-Konto zum Feed hinzufügen, damit die Pakete https://www.visualstudio.com/get-started/package/use/common-identities heruntergeladen werden können. 

enter image description here

7
Gary Howlett

Fügen Sie Ihrem Projekt eine NuGet.config hinzu, die einen alternativen Paketspeicherort angibt. Die Regeln für die Abwicklung sind in der offiziellen Dokumentation genau definiert und erläutert.

7
Daniel Mann

Eine Lösung (die für mich funktioniert) ist ein Änderungskonto für den tfs 2015 Build Agent-Dienst (auf meinem VSO-Agenten (tsf.Agent-PC auf dem Build-Computer) für tfsagent, und das Hinzufügen von Nuget.config zu C:\Users\tfsagent\AppData\Roaming\Nuget. Das ist alles!

2
honzakuzel1989
  1. Geben Sie die URL Ihres benutzerdefinierten NuGet-Feeds in der Datei nuget.config der Lösung an. Speichern Sie in dieser Datei keine Benutzernamen und Passwörter.

    <add key="nuget.org" value="https://www.nuget.org/api/v2/" />
    <add key="MyCompany" value="https://nuget.mycompany.com:443/nuget" />
    
  2. Erstellen Sie in VSTS in Ihrer Builddefinition Benutzername- und Kennwortvariablen. Variablen können verschlüsselt werden und werden in keiner der Build-Log-Ausgaben angezeigt. Hier werde ich die Variablen MyCompanyNugetUser und MyCompanyNugetPwd erstellen.

  3. In unseren Erstellungsschritten fügen wir als erste Aktion ein Powershell-Skript hinzu. Dabei werden die Variablen Benutzername und Kennwort gelesen und die Datei nuget.config auf Benutzerebene auf der Buildmaschine aktualisiert. Hier ist der Code-Ausschnitt aus meinem Inline-Powershell-Skript:

    Argumente:

    $(MyCompanyNugetUser) $(MyCompanyNugetPwd)
    

    Skript:

    param($user, $pwd)
    
    $nugetFile = "$ENV:AGENT_HOMEDIRECTORY\agent\worker\tools\nuget.exe"
    Write-Output "Looking for nuget.exe in $nugetFile"
    
    if (-not (Test-Path $nugetFile))
    {
      Write-Error "nuget.exe could not be located."
      return
    }
    
    Write-Output "nuget.exe located"
    
    $cmd = "$nugetFile sources add -name MyCompany -source https://nuget.mycompany.com:443/nuget -username $user -password $pwd -StorePasswordInClearText"
    Write-Output $cmd
    iex $cmd
    
  4. Als Nächstes führen wir einfach den Standardschritt NuGet Restore aus den Vorlagen von Microsoft aus

Mehr hier: https://codingcase.com/2016/07/27/vsts-build-setup-custom-nuget-feeds-with-authentication/

HTH

1
Sweis

In RTM von Team Foundation Server 2015 müssen Sie einen Erstellungsschritt vom Typ "NuGet Installer" hinzufügen und die Pakete der Lösungsdatei wiederherstellen, bevor Sie den eigentlichen Erstellungsprozess ausführen. In dieser Task können Sie das Argument -ConfigFile path/to/nuget.config übergeben, das Ihren Repository-Pfad enthält.

Zum Beispiel:

<configuration>
  <packageSources>
    <add key="Internal Nuget" value="\\srv-nuget\Repo" />
  </packageSources>
</configuration>

 enter image description here

0
Martin Lantzsch