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

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 .

  1. Gå till din Azure DevOps-organisation https://dev.azure.com/<ORGANIZATION_NAME>/

  2. Välj ikonen för användarinställningar och välj sedan Personliga åtkomsttoken.

    En skärmbild som visar hur du skapar en personlig åtkomsttoken.

  3. Välj Ny token

  4. Ange ett namn på din PAT och välj sedan ett förfallodatum .

  5. Välj Anpassad definierad och välj sedan Paketera>läs- och skrivhantering&.

  6. Välj Skapa när du är klar. Kopiera och lagra din PAT på en säker plats.

    En skärmbild som visar hur du konfigurerar en ny personlig åtkomsttoken.

Skapa en modul

  1. 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 manifest
    
  2. Klistra in följande skript i filen Get-Hello.psm1 :

    Function Get-Hello{
        Write-Host "Hello from my Azure DevOps Services Package."
    }
    
  3. Skapa modulmanifestet genom att köra följande kommando i din Get-Hello-katalogsökväg .

    New-ModuleManifest -Path .\Get-Hello.psd1
    
  4. Ö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'
    
  5. 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')
    
  6. Leta upp avsnittet FileList och 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

  1. 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-Hello
    
  2. Kör följande kommando för att packa modulen.

    nuget pack Get-Hello.nuspec
    
  3. Kö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>"
    
  4. Publicera paketet i feeden.

    nuget push -Source "<FEED_NAME>" -ApiKey "<ANY_STRING>" "<PACKAGE_PATH>"
    

    En skärmbild som visar det publicerade paketet.

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.

  1. Öppna ett upphöjt PowerShell-promptfönster.

  2. 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)
    
  3. Registrera din PowerShell-lagringsplats. Du SourceLocation hittar 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 $credsAzureDevopsServices
    

    Om du fortfarande använder de äldre visualstudio.com URL: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 $credsAzureDevopsServices
    

    Tips

    Om du får följande varning Unable to resolve package sourcestartar du om PowerShell-sessionen.

  4. 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 $credsAzureDevopsServices 
    
  5. Kö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-PSRepository
    
  6. Kör följande kommando om du vill hitta alla moduler på lagringsplatsen.

    Find-Module -Repository PowershellAzureDevopsServices
    
  7. Kö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