Hovedmenu
Devolutions-blog

Nyheder, opdateringer og indsigter fra Devolutions.

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

Hosting af et NuGet-feed i PowerShell Universal med Sleet

En gennemgang af Sleet som et statisk NuGet v3-feed, udgivne mapper i PowerShell Universal, Register-PSResourceRepository, et filupload-script til at pushe pakker og en dashboardtabel med resultater fra Find-PSResource.

Som Microsoft definerer det, er NuGet pakkehåndteringen til .NET. NuGet-klientværktøjerne gør det muligt at producere og forbruge pakker.

nuget.org og PowerShell Gallery er eksempler på NuGet-feeds. De lader brugere udgive pakker, så andre kan forbruge dem. Når du bruger Publish-PSResource eller Publish-Module, opretter du en NuGet-pakke og udgiver den til et feed.

Opret et NuGet-feed i PowerShell Universal

Typiske NuGet-feeds bygger på tusindvis af kodelinjer for at levere robuste mekanismer til lagring af metadata, caching og søgning i pakker. Til brugere med et begrænset antal pakker findes der et værktøj, der kan oprette statiske feeds: Sleet. Kommandolinjeværktøjet Sleet opretter statiske JSON-filer og lagerplads til NuGet-pakker. Det understøtter ikke nær så mange muligheder som andre teknologier, men det er enkelt.

I resten af indlægget ser vi på, hvordan du bruger Sleet til at oprette et NuGet-feed i PowerShell Universal.

Installer Sleet

Du kan installere Sleet som et globalt dotnet-værktøj, hvis du har .NET SDK installeret.

dotnet tool install -g sleet

Når det er installeret, kan du bare køre sleet for at bruge værktøjet.

Konfigurer et Sleet-feed

Lad os derefter sætte et enkelt Sleet-feed op. Opret en mappe, og opret derefter en lokal Sleet-konfiguration.

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

Åbn den genererede fil sleet.json, og konfigurer feedets egenskaber. Basis-URI’en sættes til en udgivet mappe i PowerShell Universal.

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

Udgiv en pakke

For at udgive en pakke kan du bruge følgende Sleet-kommando mod en enkelt NuGet-pakke eller en mappe med pakker. Jeg udgav 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 opdaterer alle de nødvendige feedfiler, opretter den rigtige mappestruktur og flytter nupkg-filen til lagermappen flatcontainer.

Host feedet i PowerShell Universal

Derefter skal PowerShell Universal sættes op til at servere NuGet-feedet. Det kan du gøre med en udgivet mappe. Du skal angive stien til mappen med NuGet-feedet.

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

Du kan kontrollere, at feedet er tilgængeligt, ved at besøge følgende URL.

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

Registrer et PowerShellGet-repository

PowerShellGet v3 er påkrævet, fordi PowerShellGet v2 ikke understøtter NuGet-feeds i version 3. Sleet genererer kun NuGet-feeds i version 3.

Install-Module PowerShellGet -AllowPrerelease -Force

Når du har installeret PowerShellGet v3, kan du bruge Register-PSResourceRepository til at registrere dit nye feed.

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

Du kan kontrollere, at repository’et blev registreret korrekt, ved at bruge 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…

Du kan også bruge kommandoer som Save-PSResource.

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

Upload nye pakker i PowerShell Universal

I stedet for at køre Sleet-kommandoerne manuelt på PowerShell Universal-maskinen kan du gøre det ved at oprette et PSU-script, der tager imod en fil. Opret et nyt script i PSU med følgende indhold.

param(
     [File]$File
)

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

Når scriptet er kørt færdigt, er NuGet-feedfilerne opdateret, og pakken er tilgængelig via PowerShellGet-kommandoerne.

PowerShell Universal job output showing Sleet pushing PSWindowsUpdate to the local feed.
Output fra Sleet push i 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.

Vis pakker i et dashboard

Du kan bruge cmdlet’en Find-PSResource til at vise alle pakkerne i dit 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.
Pakker fra Sleet-feedet i en dashboardtabel

Konklusion

I indlægget har vi gennemgået, hvordan du sætter et semistatisk NuGet-feed op med Sleet og PowerShell Universal.

Klar til at bygge? Download PowerShell Universal.