MAIN MENU
Blog de Devolutions

Anuncios, actualizaciones y análisis de Devolutions.

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

Alojar un feed NuGet en PowerShell Universal con Sleet

Recorra Sleet como feed NuGet v3 estático, las carpetas publicadas en PowerShell Universal, Register-PSResourceRepository, un script de carga para enviar paquetes y una tabla de dashboard con los resultados de Find-PSResource.

Según la definición de Microsoft, NuGet es el administrador de paquetes para .NET. Las herramientas cliente de NuGet permiten producir y consumir paquetes.

nuget.org y la PowerShell Gallery son ejemplos de feeds NuGet. Permiten a los usuarios publicar paquetes para que otros los consuman. Cuando usa Publish-PSResource o Publish-Module, está creando un paquete NuGet y publicándolo en un feed.

Crear un feed NuGet en PowerShell Universal

Los feeds NuGet habituales se basan en miles de líneas de código para ofrecer mecanismos sólidos de almacenamiento de metadatos, caché y búsqueda de paquetes. Para usuarios con un número limitado de paquetes, existe una herramienta que puede crear feeds estáticos: Sleet. La herramienta de línea de comandos Sleet crea ficheros JSON estáticos y almacenamiento para paquetes NuGet. No admite tantas opciones como otras tecnologías, pero sí ofrece sencillez.

En el resto de este artículo veremos cómo usar Sleet para crear un feed NuGet en PowerShell Universal.

Instalar Sleet

Puede instalar Sleet como herramienta global dotnet si tiene instalado el SDK de .NET.

dotnet tool install -g sleet

Una vez instalado, puede ejecutar sleet para acceder a la herramienta.

Configurar un feed Sleet

A continuación, configuremos un feed Sleet sencillo. Cree un directorio y luego una configuración Sleet local.

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

Abra el fichero sleet.json generado y configure las propiedades del feed. El URI base apuntará a una carpeta publicada en PowerShell Universal.

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

Publicar un paquete

Para publicar un paquete, puede usar el siguiente comando Sleet contra un solo paquete NuGet o un directorio de paquetes. Yo publiqué 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 actualizará todos los ficheros del feed necesarios, creará la estructura de carpetas adecuada y moverá el nupkg a la carpeta de almacenamiento flatcontainer.

Alojar en PowerShell Universal

A continuación, hay que configurar PowerShell Universal para servir el feed NuGet. Podemos hacerlo con una carpeta publicada. Debe indicar la ruta de la carpeta del feed NuGet.

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

Puede comprobar que el feed es accesible visitando la siguiente URL.

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

Registrar un repositorio PowerShellGet

Se requiere PowerShellGet v3 porque PowerShellGet v2 no admite feeds NuGet v3. Sleet solo genera feeds NuGet v3.

Install-Module PowerShellGet -AllowPrerelease -Force

Cuando tenga PowerShellGet v3 instalado, puede usar Register-PSResourceRepository para registrar el nuevo feed.

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

Puede comprobar que el repositorio se registró correctamente 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…

También podrá usar comandos como Save-PSResource.

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

Cargar paquetes nuevos en PowerShell Universal

En lugar de ejecutar manualmente los comandos Sleet en la máquina de PowerShell Universal, puede crear un script PSU que acepte un fichero. Cree un script nuevo en PSU con el contenido siguiente.

param(
     [File]$File
)

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

Cuando el script haya terminado, los ficheros del feed NuGet se habrán actualizado y el paquete estará disponible mediante los comandos de PowerShellGet.

PowerShell Universal job output showing Sleet pushing PSWindowsUpdate to the local feed.
Salida de Sleet push en 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.

Mostrar paquetes en un dashboard

Puede usar el cmdlet Find-PSResource para mostrar todos los paquetes de su 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.
Paquetes del feed Sleet en una tabla de dashboard

Conclusión

En este artículo hemos visto cómo configurar un feed NuGet semiestático con Sleet y PowerShell Universal.

¿Listo para crear? Descargue PowerShell Universal.