Share via


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 skripten snabbt med hjälp av kommandoraden.

Den här artikeln beskriver hur du konfigurerar Ditt Azure Artifacts-flöde som en privat PowerShell-lagringsplats för att lagra och dela dina PowerShell-moduler. Du lär dig att:

  • Skapa en personlig åtkomsttoken
  • Skapa en ny feed för att lagra PowerShell-moduler
  • Skapa, paketera och publicera PowerShell-moduler
  • Anslut till en feed med PowerShell
  • Använda den privata PowerShell-lagringsplatsen med Azure Pipelines

Förutsättningar

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 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 för din PAT och välj sedan ett förfallodatum .

  5. Välj Anpassad definierad och välj sedan Paketera>Läsa, skriva och hantera.

  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 reda på variabelnRootModule. 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 din modul.

    FileList = @('./Get-Hello.psm1')
    

Packa och publicera modulen

  1. Skapa 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 v3 stöds inte. Kontrollera att du använder v2 i feedkällans URL.

    • Flöde med organisationsomfattning:

      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>"
      
    • Flöde med projektomfattning:

      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>"
      
  4. Publicera paketet i feeden.

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

    En skärmbild som visar det publicerade paketet.

Viktigt!

Versionsnumret i modulmanifestet (.psd1) och .nuspec-filen måste matcha.

Anslut att mata in som en PowerShell-lagringsplats

  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 Artefakter> Anslut till Feed>NuGet.exe under Project setup source URL (Käll-URL för projektinstallation).

    • 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
      

    Dricks

    Vissa versioner av PowerShell kräver att en ny session startas om efter att cmdleten Register-PSRepository har körts för att undvika varningen Det går inte att lösa paketkällan .

  4. Registrera paketkällan:

    • 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

Kommentar

Om din organisation använder en brandvägg eller en proxyserver kontrollerar du att du tillåter URL:er och IP-adresser för Azure Artifacts-domäner.

Registrera och installera modulen med Hjälp av Azure Pipelines

Det här exemplet illustrerar processen med att autentisera och installera en PowerShell-modul med hjälp av en YAML-pipeline. Om du vill använda din personliga åtkomsttoken i pipelinen bör du inkludera den som en pipelinevariabel enligt följande:

  1. Logga in på din Azure DevOps-organisation och navigera sedan till projektet.

  2. Välj Pipelines, välj din pipeline och välj sedan Redigera för att redigera din pipeline.

  3. Välj Variabler i det övre högra hörnet och välj + sedan tecknet för att skapa en ny variabel.

  4. Ange ett namn för variabeln och klistra sedan in din personliga åtkomsttoken i textrutan Värde .

  5. Kontrollera att du markerar kryssrutan Behåll det här värdet hemligt . Välj Ok när du är klar. Nu är du redo att använda variabeln i pipelinen.

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)