Uso de una fuente de Azure Artifacts como repositorio privado de PowerShell
Azure DevOps Services
Azure Artifacts proporciona una manera sencilla de compartir scripts de PowerShell entre equipos para promover la colaboración y maximizar la eficacia. Al almacenar módulos de PowerShell en un repositorio privado, puede proporcionar a los miembros de su equipo la capacidad de descargar o actualizar esos scripts rápidamente mediante la línea de comandos.
Este artículo le guiará a través de la configuración de la fuente de Azure Artifacts como un repositorio privado de PowerShell para almacenar y compartir los módulos de PowerShell. Aprenderá a:
- Creación de un token de acceso personal
- Creación de una nueva fuente para almacenar módulos de PowerShell
- Creación, empaquetado y publicación de módulos de PowerShell
- Conectar a una fuente con PowerShell
- Uso del repositorio privado de PowerShell con Azure Pipelines
Requisitos previos
- NuGet.exe
- Proveedor de credenciales de Azure Artifacts
- Una organización de Azure DevOps. Cree una organización, si aún no tiene una.
- Una fuente de Azure Artifacts. Cree una fuente si todavía no tiene una.
Crear un token de acceso personal
El uso de un token de acceso personal (PAT) es una excelente manera de autenticarse con Azure DevOps sin usar las credenciales principales. Consulte Uso de tokens de acceso personal para obtener más detalles.
Vaya a la organización de Azure DevOps.
https://dev.azure.com/<ORGANIZATION_NAME>/
Seleccione el icono de configuración de usuario y, a continuación, seleccione Tokens de acceso personal.
Seleccione Nuevo token.
Escriba un nombre para el PAT y, a continuación, elija una fecha de expiración .
Seleccione Personalizado definido y, a continuación, seleccione Empaquetado>de lectura, escritura y administración.
Seleccione Crear cuando haya terminado. Copie y almacene su PAT en una ubicación segura.
Creación de un módulo
Cree una nueva carpeta Get-Hello. Navegue dentro de la carpeta y cree un nuevo archivo Get-Hello.psm1.
|--- Get-Hello // Parent folder |--- Get-Hello.psm1 // This will become our PowerShell Module |--- Get-Hello.psd1 // This will become our module manifest
Pegue el siguiente script en el archivo Get-Hello.psm1 :
Function Get-Hello{ Write-Host "Hello from my Azure DevOps Services Package." }
Cree el manifiesto del módulo ejecutando el comando siguiente en la ruta de acceso del directorio Get-Hello .
New-ModuleManifest -Path .\Get-Hello.psd1
Abra el archivo Get-Hello.psd1 y busque la
RootModule
variable . Reemplace la cadena vacía por la ruta de acceso al archivo Get-Hello.psm1 de la siguiente manera:RootModule = 'Get-Hello.psm1'
La
FunctionsToExport
sección está pensada para definir la lista de funciones que se exportarán desde este módulo. Agregue la función Get-Hello de la siguiente manera:FunctionsToExport = @('Get-Hello')
Busque la
FileList
sección y agregue la siguiente lista de archivos que se deben empaquetar con el módulo.FileList = @('./Get-Hello.psm1')
Empaquetado y publicación del módulo
Cree un archivo nuspec para el módulo. Este comando creará un archivo Get-Hello.nuspec que contiene los metadatos necesarios para empaquetar el módulo.
nuget spec Get-Hello
Ejecute el siguiente comando para empaquetar el módulo.
nuget pack Get-Hello.nuspec
Ejecute el siguiente comando para agregar la dirección URL del origen de la fuente. NuGet v3 no es compatible, asegúrese de usar v2 en la dirección URL del origen de la fuente.
Fuente con ámbito de organización:
nuget sources Add -Name "<FEED_NAME>" -Source "https://pkgs.dev.azure.com/<ORGANIZATION_NAME>/_packaging/<FEED_NAME>/nuget/v2" -username "<USER_NAME>" -password "<PERSONAL_ACCESS_TOKEN>"
Fuente con ámbito de proyecto:
nuget sources Add -Name "<FEED_NAME>" -Source "https://pkgs.dev.azure.com/<ORGANIZATION_NAME>/<PROJECT_NAME>/_packaging/<FEED_NAME>/nuget/v2" -username "<USER_NAME>" -password "<PERSONAL_ACCESS_TOKEN>"
Publique el paquete en la fuente.
nuget push -Source "<FEED_NAME>" -ApiKey "<ANY_STRING>" "<PACKAGE_PATH>"
Importante
El número de versión del manifiesto del módulo (.psd1) y el archivo .nuspec deben coincidir.
Conectar para alimentarse como repositorio de PowerShell
Abra una ventana de símbolo del sistema de PowerShell con privilegios elevados.
Configure las credenciales para autenticarse con Azure Artifacts. Reemplace los marcadores de posición por la información adecuada.
$patToken = "<PERSONAL_ACCESS_TOKEN>" | ConvertTo-SecureString -AsPlainText -Force
$credsAzureDevopsServices = New-Object System.Management.Automation.PSCredential("<USER_NAME>", $patToken)
Registre el repositorio de PowerShell. Para encontrar el
SourceLocation
vínculo, vaya a Artifacts> Conectar to Feed>NuGet.exe (Fuente de NuGet.exe) en Dirección URL de origen del programa de instalación del proyecto.Fuente con ámbito de proyecto:
Register-PSRepository -Name "PowershellAzureDevopsServices" -SourceLocation "https://pkgs.dev.azure.com/<ORGANIZATION_NAME>/<PROJECT_NAME>/_packaging/<FEED_NAME>/nuget/v2" -PublishLocation "https://pkgs.dev.azure.com/<ORGANIZATION_NAME>/<PROJECT_NAME>/_packaging/<FEED_NAME>/nuget/v2" -InstallationPolicy Trusted -Credential $credsAzureDevopsServices
Fuente con ámbito de organización:
Register-PSRepository -Name "PowershellAzureDevopsServices" -SourceLocation "https://pkgs.dev.azure.com/<ORGANIZATION_NAME>/_packaging/<FEED_NAME>/nuget/v2" -PublishLocation "https://pkgs.dev.azure.com/<ORGANIZATION_NAME>/_packaging/<FEED_NAME>/nuget/v2" -InstallationPolicy Trusted -Credential $credsAzureDevopsServices
Si sigue usando las direcciones URL anteriores
visualstudio.com
, use el siguiente comando en su lugar:Fuente con ámbito de proyecto:
Register-PSRepository -Name "PowershellAzureDevopsServices" -SourceLocation "https://<ORGANIZATION_NAME>.pkgs.visualstudio.com/<PROJECT_NAME>/_packaging/<FEED_NAME>/nuget/v2" -PublishLocation "https://<ORGANIZATION_NAME>.pkgs.visualstudio.com/<PROJECT_NAME>/_packaging/<FEED_NAME>/nuget/v2" -InstallationPolicy Trusted -Credential $credsAzureDevopsServices
Fuente con ámbito de organización:
Register-PSRepository -Name "PowershellAzureDevopsServices" -SourceLocation "https://<ORGANIZATION_NAME>.pkgs.visualstudio.com/_packaging/<FEED_NAME>/nuget/v2" -PublishLocation "https://<ORGANIZATION_NAME>.pkgs.visualstudio.com/_packaging/<FEED_NAME>/nuget/v2" -InstallationPolicy Trusted -Credential $credsAzureDevopsServices
Sugerencia
Algunas versiones de PowerShell requieren reiniciar una nueva sesión después de ejecutar el
Register-PSRepository
cmdlet para evitar la advertencia no se puede resolver el origen del paquete .Registre el origen del paquete:
Fuente con ámbito de proyecto:
Register-PackageSource -Name "PowershellAzureDevopsServices" -Location "https://pkgs.dev.azure.com/<ORGANIZATION_NAME>/<PROJECT_NAME>/_packaging/<FEED_NAME>/nuget/v2" -ProviderName NuGet -Trusted -SkipValidate -Credential $credsAzureDevopsServices
Fuente con ámbito de organización:
Register-PackageSource -Name "PowershellAzureDevopsServices" -Location "https://pkgs.dev.azure.com/<ORGANIZATION_NAME>/_packaging/<FEED_NAME>/nuget/v2" -ProviderName NuGet -Trusted -SkipValidate -Credential $credsAzureDevopsServices
Ejecute el siguiente comando para confirmar si el repositorio se registró correctamente. Este comando obtiene todos los repositorios registrados para el usuario actual:
Get-PSRepository
Ejecute el siguiente comando si desea buscar todos los módulos en el repositorio.
Find-Module -Repository PowershellAzureDevopsServices
Ejecute el siguiente comando si desea instalar el módulo Get-Hello .
Install-Module -Name Get-Hello -Repository PowershellAzureDevopsServices
Si el comando Install-Module devuelve el siguiente error: No se puede resolver el origen del paquete, vuelva a ejecutar el Register-PackageSource
cmdlet con la Trusted
marca siguiente:
Register-PackageSource -Name "PowershellAzureDevopsServices" -Location "https://pkgs.dev.azure.com/<ORGANIZATION_NAME>/_packaging/<FEED_NAME>/nuget/v2" -ProviderName NuGet -Trusted -Trusted -SkipValidate -Credential $credsAzureDevopsServices
Nota:
Si su organización usa un firewall o un servidor proxy, asegúrese de permitir direcciones IP y direcciones URL de dominio de Azure Artifacts.
Registro e instalación del módulo mediante Azure Pipelines
En este ejemplo se muestra el proceso de autenticación e instalación de un módulo de PowerShell mediante una canalización YAML. Para usar el token de acceso personal dentro de la canalización, debe incluirlo como una variable de canalización, como se indica a continuación:
Inicie sesión en su organización de Azure DevOps y vaya a su proyecto.
Seleccione Canalizaciones, seleccione la canalización y, a continuación, seleccione Editar para editar la canalización.
Seleccione Variables en la esquina superior derecha y, a continuación, seleccione el + signo para crear una nueva variable.
Proporcione un nombre para la variable y pegue el token de acceso personal en el cuadro de texto Valor .
Asegúrese de activar la casilla Mantener este secreto de valor. Seleccione Aceptar cuando haya terminado. Ya está listo para usar la variable en la canalización.
trigger:
- main
pool:
vmImage: 'Windows-latest'
variables:
PackageFeedEndpoint: 'https://pkgs.dev.azure.com/<ORGANIZATION_NAME>/_packaging/<FEED_NAME>/nuget/v2' ## For project scoped feeds use: 'https://pkgs.dev.azure.com/<ORGANIZATION_NAME>/<PROJECT_NAME>/_packaging/<FEED_NAME>/nuget/v2'
PackageFeedEndpointCredential: '{"endpointCredentials": [{"endpoint":"$(PackageFeedEndpoint)", "username":"Admin", "password":"$(AZURE_DEVOPS_PAT)"}]}'
steps:
- powershell: |
Register-PSRepository -Name "psRepoPipeline" -SourceLocation '$(PackageFeedEndpoint)' -InstallationPolicy Trusted
displayName: 'Register Azure Artifacts Feed as PSRepository'
env:
VSS_NUGET_EXTERNAL_FEED_ENDPOINTS: $(PackageFeedEndpointCredential)
- powershell: |
echo (Get-PSRepository)
displayName: 'Get all module repositories'
- powershell: |
Find-Module -Name "Get-Hello" | Install-Module -Confirm:$false -Force
displayName: 'Install the Get-Hello PowerShell module'
env:
VSS_NUGET_EXTERNAL_FEED_ENDPOINTS: $(PackageFeedEndpointCredential)
Artículos relacionados
Comentarios
https://aka.ms/ContentUserFeedback.
Próximamente: A lo largo de 2024 iremos eliminando gradualmente GitHub Issues como mecanismo de comentarios sobre el contenido y lo sustituiremos por un nuevo sistema de comentarios. Para más información, vea:Enviar y ver comentarios de