Använda en Azure Artifacts-feed som en privat PowerShell-lagringsplats
Azure DevOps Services
Azure Artifacts är ett enkelt sätt att dela PowerShell-skript mellan team för att främja samarbete och maximera effektiviteten. Genom att lagra PowerShell-moduler på en privat lagringsplats kan du ge medlemmar i ditt team möjlighet att ladda ned eller uppdatera dessa skript snabbt med hjälp av kommandoraden.
Den här artikeln vägleder dig genom att konfigurera Azure Artifacts-feeden som en privat PowerShell-lagringsplats för att lagra och dela dina PowerShell-moduler. Du lär dig följande:
- Skapa en personlig åtkomsttoken
- Skapa en ny feed för att lagra PowerShell-moduler
- Skapa, paketera och publicera PowerShell-moduler
- Ansluta till en feed med PowerShell
- Använda den privata PowerShell-lagringsplatsen med Azure Pipelines
Förkunskapskrav
- NuGet.exe
- En Azure DevOps-organisation. Skapa en organisation, om du inte redan har en.
- En Azure Artifacts-feed. Skapa en ny feed om du inte redan har en.
Skapa en personlig åtkomsttoken
Att använda en personlig åtkomsttoken (PAT) är ett bra sätt att autentisera med Azure DevOps utan att använda dina primära autentiseringsuppgifter. Mer information finns i Använda personliga åtkomsttoken .
Gå till din Azure DevOps-organisation
https://dev.azure.com/<ORGANIZATION_NAME>/Välj ikonen för användarinställningar och välj sedan Personliga åtkomsttoken.
Välj Ny token
Ange ett namn på din PAT och välj sedan ett förfallodatum .
Välj Anpassad definierad och välj sedan Paketera>läs- och skrivhantering&.
Välj Skapa när du är klar. Kopiera och lagra din PAT på en säker plats.
Skapa en modul
Skapa en ny mapp Get-Hello. Navigera i mappen och skapa en ny fil Get-Hello.psm1.
|--- Get-Hello // Parent folder |--- Get-Hello.psm1 // This will become our PowerShell Module |--- Get-Hello.psd1 // This will become our module manifestKlistra in följande skript i filen Get-Hello.psm1 :
Function Get-Hello{ Write-Host "Hello from my Azure DevOps Services Package." }Skapa modulmanifestet genom att köra följande kommando i din Get-Hello-katalogsökväg .
New-ModuleManifest -Path .\Get-Hello.psd1Öppna filen Get-Hello.psd1 och leta upp variabeln
RootModule. Ersätt den tomma strängen med sökvägen till filen Get-Hello.psm1 på följande sätt:RootModule = 'Get-Hello.psm1'Avsnittet
FunctionsToExportär avsett att definiera listan över funktioner som ska exporteras från den här modulen. Lägg till funktionen Get-Hello på följande sätt:FunctionsToExport = @('Get-Hello')Leta upp avsnittet
FileListoch lägg till följande lista över filer som ska paketeras med modulen.FileList = @('PSModule.psm1', 'PSGet.Format.ps1xml', 'PSGet.Resource.psd1')
Packa och publicera modulen
Skapa en .nuspec-fil för modulen. Det här kommandot skapar en Get-Hello.nuspec-fil som innehåller metadata som behövs för att packa modulen.
nuget spec Get-HelloKör följande kommando för att packa modulen.
nuget pack Get-Hello.nuspecKör följande kommando för att lägga till feedkällans URL.
nuget sources Add -Name "<FEED_NAME>" -Source "https://pkgs.dev.azure.com/<ORGANIZATION_NAME>/_packaging/<FEED_NAME>/nuget/v3/index.json" -username "<USER_NAME>" -password "<PERSONAL_ACCESS_TOKEN>"Publicera paketet i feeden.
nuget push -Source "<FEED_NAME>" -ApiKey "<ANY_STRING>" "<PACKAGE_PATH>"
Anteckning
Versionsnumret i modulmanifestet (.psd1) och .nuspec-filen måste matcha.
Ansluta till feed som en PowerShell-lagringsplats
Viktigt
PowerShell stöder inte version 3 av NuGet.
Öppna ett upphöjt PowerShell-promptfönster.
Konfigurera dina autentiseringsuppgifter för att autentisera med Azure Artifacts. Ersätt platshållarna med lämplig information.
$patToken = "<PERSONAL_ACCESS_TOKEN>" | ConvertTo-SecureString -AsPlainText -Force$credsAzureDevopsServices = New-Object System.Management.Automation.PSCredential("<USER_NAME>", $patToken)Registrera din PowerShell-lagringsplats. Du
SourceLocationhittar länken genom att gå till Artifacts>Connect to Feed>NuGet.exe under Project setup source URL ( Url för project setup source).- Flöde med projektomfattning:
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- Flöde med organisationsomfattning:
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 $credsAzureDevopsServicesOm du fortfarande använder de äldre
visualstudio.comURL:erna använder du följande kommando i stället:- Flöde med projektomfattning:
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- Flöde med organisationsomfattning:
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 $credsAzureDevopsServicesTips
Om du får följande varning
Unable to resolve package sourcestartar du om PowerShell-sessionen.Registrera din paketkälla:
- Flöde med projektomfattning:
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- Flöde med organisationsomfattning:
Register-PackageSource -Name "PowershellAzureDevopsServices" -Location "https://pkgs.dev.azure.com/<ORGANIZATION_NAME>/_packaging/<FEED_NAME>/nuget/v2" -ProviderName NuGet -Trusted -SkipValidate -Credential $credsAzureDevopsServicesKör följande kommando för att bekräfta om lagringsplatsen har registrerats. Det här kommandot hämtar alla registrerade lagringsplatser för den aktuella användaren:
Get-PSRepositoryKör följande kommando om du vill hitta alla moduler på lagringsplatsen.
Find-Module -Repository PowershellAzureDevopsServicesKör följande kommando om du vill installera Get-Hello-modulen .
Install-Module -Name Get-Hello -Repository PowershellAzureDevopsServices
Om kommandot Install-Module returnerar följande fel: Det går inte att lösa paketkällan kör du cmdleten Register-PackageSourceTrusted igen med flaggan på följande sätt:
Register-PackageSource -Name "PowershellAzureDevopsServices" -Location "https://pkgs.dev.azure.com/<ORGANIZATION_NAME>/_packaging/<FEED_NAME>/nuget/v2" -ProviderName NuGet -Trusted -Trusted -SkipValidate -Credential $credsAzureDevopsServices
Ansluta till feed med Azure Pipelines
I följande exempel visas hur du autentiserar och installerar en PowerShell-modul med YAML-pipeline.
variables:
PackageFeedEndpoint: https://pkgs.dev.azure.com/<ORGANIZATION_NAME>/_packaging/<FEED_NAME>/nuget/v2 # For Project-scoped feed use this endpoint url: https://pkgs.dev.azure.com/<ORGANIZATION_NAME>/<PROJECT_NAME>/_packaging/<FEED_NAME>/nuget/v2
# Construct a JSON object that contains the endpoint URL and the personal access token to pass them to Azure Artifacts credential provider.
PackageFeedEndpointCredential: '{"endpointCredentials": [{"endpoint":"$(PackageFeedEndpoint)", "username":"OPTIONAL", "password":"ACCESS TOKEN"}]}'
steps:
# To prevent possible 'Unable to resolve package source' errors when installing modules from your feed, call Install-Module in a separate PowerShell task.
- powershell: |
Register-PSRepository -Name "PowershellAzureDevopsServices" -SourceLocation "$(PackageFeedEndpoint)" -PublishLocation "$(PackageFeedEndpoint)" -InstallationPolicy Trusted
displayName: 'Register Azure Artifacts Feed as PSRepository'
env:
# This environment variable passes the credentials to the credential provider.
VSS_NUGET_EXTERNAL_FEED_ENDPOINTS: $(PackageFeedEndpointCredential)
- powershell: |
Install-Module -Name Get-Hello -Repository PowershellAzureDevopsServices
displayName: 'Install Get-Hello PowerShell module'
env:
# The credentials must be set on every task that interacts with your private PowerShell repository.
VSS_NUGET_EXTERNAL_FEED_ENDPOINTS: $(PackageFeedEndpointCredential)
- powershell: |
Get-Hello
displayName: Execute Get-Hello