MAIN MENU
Blog di Devolutions

Annunci, aggiornamenti e approfondimenti di Devolutions.

Devolutions PowerShell Universal hosting a NuGet feed illustration for the blog.

Ospitare un feed NuGet in PowerShell Universal con Sleet

Una panoramica di Sleet come feed NuGet v3 statico, delle cartelle pubblicate in PowerShell Universal, di Register-PSResourceRepository, di uno script di upload per inviare pacchetti e di una tabella della dashboard con i risultati di Find-PSResource.

Secondo la definizione di Microsoft, NuGet è il gestore di pacchetti per .NET. Gli strumenti client NuGet consentono di produrre e consumare pacchetti.

nuget.org e la PowerShell Gallery sono esempi di feed NuGet. Consentono agli utenti di pubblicare pacchetti affinché altri li consumino. Quando usa Publish-PSResource o Publish-Module, sta creando un pacchetto NuGet e pubblicandolo in un feed.

Creare un feed NuGet in PowerShell Universal

I feed NuGet tipici si basano su migliaia di righe di codice per offrire meccanismi solidi di archiviazione dei metadati, caching e ricerca dei pacchetti. Per gli utenti con un numero limitato di pacchetti, esiste uno strumento che può creare feed statici: Sleet. Lo strumento da riga di comando Sleet crea file JSON statici e archiviazione per i pacchetti NuGet. Non supporta molte delle opzioni di altre tecnologie, ma offre semplicità.

Nel resto di questo articolo vedremo come usare Sleet per creare un feed NuGet in PowerShell Universal.

Installare Sleet

Può installare Sleet come strumento globale dotnet se ha installato il .NET SDK.

dotnet tool install -g sleet

Una volta installato, può semplicemente eseguire sleet per accedere allo strumento.

Configurare un feed Sleet

Successivamente, configuriamo un feed Sleet semplice. Crei una directory e poi una configurazione Sleet locale.

New-Item -ItemType Directory C:\sleet\
Set-Location C:\sleet
sleet createconfig --local

Apra il file sleet.json generato e configuri le proprietà del feed. L’URI di base punterà a una cartella pubblicata in PowerShell Universal.

{
  "username": "",
  "useremail": "",
  "sources": [
    {
      "name": "myLocalFeed",
      "type": "local",
      "path": "C:\\sleet\\myfeed",
      "baseURI": "http://localhost:5000/feed/"
    }
  ]
}

Pubblicare un pacchetto

Per pubblicare un pacchetto, può usare il seguente comando Sleet su un singolo pacchetto NuGet o su una directory di pacchetti. Ho pubblicato Posh-SSH.

Invoke-WebRequest 'https://www.powershellgallery.com/api/v2/package/Posh-SSH/3.0.8' -OutFile "C:\Users\adamr\Downloads\posh-ssh.3.0.8.nupkg"
Set-Location C:\sleet
sleet push -s myLocalFeed "C:\Users\adamr\Downloads\posh-ssh.3.0.8.nupkg"

Sleet aggiornerà tutti i file del feed necessari, creerà la struttura di cartelle corretta e sposterà il nupkg nella cartella di archiviazione flatcontainer.

Ospitare in PowerShell Universal

Successivamente, dobbiamo configurare PowerShell Universal per servire il feed NuGet. Possiamo farlo con una cartella pubblicata. Dovrà impostare il percorso della cartella del feed NuGet.

New-PSUPublishedFolder -Path C:\sleet\myfeed -RequestPath /feed

Può verificare che il feed sia accessibile visitando il seguente URL.

http://localhost:5000/feed/index.json

Registrare un repository PowerShellGet

PowerShellGet v3 è richiesto perché PowerShellGet v2 non supporta i feed NuGet v3. Sleet genera solo feed NuGet v3.

Install-Module PowerShellGet -AllowPrerelease -Force

Una volta installato PowerShellGet v3, può usare Register-PSResourceRepository per registrare il nuovo feed.

Register-PSResourceRepository -Name 'MyLocalFeed' -Uri 'http://localhost:5000/feed/index.json'

Può verificare che il repository sia stato registrato correttamente con Find-PSResource.

Find-PSResource -Name posh-ssh
Name     Version Prerelease Repository  Description
----     ------- ---------- ----------  -----------
Posh-SSH 3.0.8.0            MyLocalFeed Provide SSH and SCP functionality for executing commands against remot…

Potrà anche usare comandi come Save-PSResource.

Save-PSResource -Name posh-ssh -Path .\ -Repository MyLocalFeed

Caricare nuovi pacchetti in PowerShell Universal

Invece di eseguire manualmente i comandi Sleet sulla macchina PowerShell Universal, può creare uno script PSU che accetta un file. Crei un nuovo script in PSU con il contenuto seguente.

param(
     [File]$File
)

$Package = [IO.Path]::GetTempFileName()
[System.IO.File]::WriteAllBytes($Package, $File.Content)
Set-Location C:\sleet
sleet push -s myLocalFeed $Package

Al termine dello script, i file del feed NuGet saranno stati aggiornati e il pacchetto sarà disponibile tramite i comandi PowerShellGet.

PowerShell Universal job output showing Sleet pushing PSWindowsUpdate to the local feed.
Output di Sleet push in PowerShell Universal
Find-PSResource -Name pswindowsupdate
Name            Version Prerelease Repository  Description
----            ------- ---------- ----------  -----------
PSWindowsUpdate 2.2.0.3            MyLocalFeed This module contain cmdlets to manage Windows Update Client.

Visualizzare i pacchetti in una dashboard

Può usare il cmdlet Find-PSResource per visualizzare tutti i pacchetti del feed.

New-UDDashboard -Title 'PowerShell Universal' -Content {
    $Packages = Find-PSResource -Name * -Repository MyLocalFeed | Select Name,Version,Description
    New-UDTable -Data $Packages
}
PowerShell Universal dashboard table listing Polly, Posh-SSH, and PSWindowsUpdate packages.
Pacchetti del feed Sleet in una tabella della dashboard

Conclusione

In questo articolo abbiamo visto come configurare un feed NuGet semi-statico con Sleet e PowerShell Universal.

Pronto a iniziare a creare? Scarichi PowerShell Universal.