Share via


Een Azure Artifacts-feed gebruiken als een persoonlijke PowerShell-opslagplaats

Azure DevOps Services

Azure Artifacts biedt een eenvoudige manier om PowerShell-scripts te delen tussen teams om samenwerking te bevorderen en de effectiviteit te maximaliseren. Door PowerShell-modules op te slaan in een privéopslagplaats, kunt u leden van uw team de mogelijkheid geven om deze scripts snel te downloaden of bij te werken met behulp van de opdrachtregel.

In dit artikel wordt u begeleid bij het instellen van uw Azure Artifacts-feed als een persoonlijke PowerShell-opslagplaats om uw PowerShell-modules op te slaan en te delen. U leert het volgende:

  • Een persoonlijk toegangstoken maken
  • Een nieuwe feed maken om PowerShell-modules op te slaan
  • PowerShell-modules maken, verpakken en publiceren
  • Verbinding maken naar een feed met PowerShell
  • De persoonlijke PowerShell-opslagplaats gebruiken met Azure Pipelines

Vereisten

Een persoonlijk toegangstoken maken

Het gebruik van een persoonlijk toegangstoken (PAT) is een uitstekende manier om te verifiëren met Azure DevOps zonder uw primaire referenties te gebruiken. Zie Persoonlijke toegangstokens gebruiken voor meer informatie.

  1. Navigeer naar uw Azure DevOps-organisatie https://dev.azure.com/<ORGANIZATION_NAME>/

  2. Selecteer het pictogram gebruikersinstellingen en selecteer vervolgens Persoonlijke toegangstokens.

    Een schermopname die laat zien hoe u een persoonlijk toegangstoken maakt.

  3. Nieuw token selecteren

  4. Voer een naam in voor uw PAT en kies vervolgens een vervaldatum .

  5. Selecteer Aangepast gedefinieerd en selecteer vervolgens Verpakking>lezen, schrijven en beheren.

  6. Selecteer Maken wanneer u klaar bent. Kopieer en bewaar uw PAT op een veilige locatie.

    Een schermopname die laat zien hoe u een nieuw persoonlijk toegangstoken instelt.

Een module maken

  1. Maak een nieuwe map Get-Hello. Navigeer in uw map en maak een nieuw bestand 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. Plak het volgende script in uw Get-Hello.psm1-bestand :

    Function Get-Hello{
        Write-Host "Hello from my Azure DevOps Services Package."
    }
    
  3. Maak het modulemanifest door de volgende opdracht uit te voeren in het mappad Get-Hello .

    New-ModuleManifest -Path .\Get-Hello.psd1
    
  4. Open het bestand Get-Hello.psd1 en zoek de RootModule variabele. Vervang de lege tekenreeks door het pad naar uw Get-Hello.psm1-bestand als volgt:

    RootModule = 'Get-Hello.psm1'
    
  5. De FunctionsToExport sectie is bedoeld om de lijst met functies te definiëren die uit deze module worden geëxporteerd. Voeg de functie Get-Hello als volgt toe:

    FunctionsToExport = @('Get-Hello')
    
  6. Zoek de FileList sectie en voeg de volgende lijst met bestanden toe die moeten worden verpakt met uw module.

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

Module inpakken en publiceren

  1. Maak nuspec-bestand voor uw module. Met deze opdracht maakt u een Get-Hello.nuspec-bestand met metagegevens die nodig zijn om de module in te pakken.

    nuget spec Get-Hello
    
  2. Voer de volgende opdracht uit om uw module in te pakken.

    nuget pack Get-Hello.nuspec
    
  3. Voer de volgende opdracht uit om de url van de feedbron toe te voegen. NuGet v3 wordt niet ondersteund. Zorg ervoor dat u v2 gebruikt in de bron-URL van uw feed.

    • Feed met organisatiebereik:

      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>"
      
    • Feed met projectbereik:

      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. Publiceer het pakket naar uw feed.

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

    Een schermopname van het gepubliceerde pakket.

Belangrijk

Het versienummer in het modulemanifest (.psd1) en het .nuspec-bestand moeten overeenkomen.

Verbinding maken als PowerShell-opslagplaats

  1. Open een PowerShell-promptvenster met verhoogde bevoegdheid.

  2. Stel uw referenties in voor verificatie met Azure Artifacts. Vervang de tijdelijke aanduidingen door de juiste informatie.

    $patToken = "<PERSONAL_ACCESS_TOKEN>" | ConvertTo-SecureString -AsPlainText -Force
    
    $credsAzureDevopsServices = New-Object System.Management.Automation.PSCredential("<USER_NAME>", $patToken)
    
  3. Registreer uw PowerShell-opslagplaats. De SourceLocation koppeling vindt u door naar Artefacten> te navigeren Verbinding maken om NuGet.exe in te voeren>onder de bron-URL van de installatie van Project.

    • Feed met projectbereik:

      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
      
    • Feed met organisatiebereik:

      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
      

    Als u nog steeds de oudere visualstudio.com URL's gebruikt, gebruikt u in plaats daarvan de volgende opdracht:

    • Feed met projectbereik:

      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
      
    • Feed met organisatiebereik:

      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
      

    Tip

    Voor bepaalde versies van PowerShell moet een nieuwe sessie opnieuw worden opgestart nadat de Register-PSRepository cmdlet is uitgevoerd om te voorkomen dat de waarschuwing over pakketbronnen kan worden opgelost.

  4. Registreer uw pakketbron:

    • Feed met projectbereik:

      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
      
    • Feed met organisatiebereik:

      Register-PackageSource -Name "PowershellAzureDevopsServices" -Location "https://pkgs.dev.azure.com/<ORGANIZATION_NAME>/_packaging/<FEED_NAME>/nuget/v2" -ProviderName NuGet -Trusted -SkipValidate -Credential $credsAzureDevopsServices 
      
  5. Voer de volgende opdracht uit om te bevestigen of de opslagplaats is geregistreerd. Met deze opdracht worden alle geregistreerde opslagplaatsen voor de huidige gebruiker ophaalt:

    Get-PSRepository
    
  6. Voer de volgende opdracht uit als u alle modules in de opslagplaats wilt vinden.

    Find-Module -Repository PowershellAzureDevopsServices
    
  7. Voer de volgende opdracht uit als u de Get-Hello-module wilt installeren.

    Install-Module -Name Get-Hello -Repository PowershellAzureDevopsServices
    

Als de opdracht Install-Module de volgende fout retourneert: Kan pakketbron niet oplossen, voer de Register-PackageSource cmdlet opnieuw uit met de Trusted vlag als volgt:

Register-PackageSource -Name "PowershellAzureDevopsServices" -Location "https://pkgs.dev.azure.com/<ORGANIZATION_NAME>/_packaging/<FEED_NAME>/nuget/v2" -ProviderName NuGet -Trusted -Trusted -SkipValidate -Credential $credsAzureDevopsServices

Notitie

Als uw organisatie een firewall of een proxyserver gebruikt, moet u ervoor zorgen dat u URL's en IP-adressen van Azure Artifacts-domeinen toestaat.

Module registreren en installeren met Behulp van Azure Pipelines

In dit voorbeeld ziet u het proces voor het verifiëren en installeren van een PowerShell-module met behulp van een YAML-pijplijn. Als u uw persoonlijke toegangstoken in de pijplijn wilt gebruiken, moet u het als volgt opnemen als een pijplijnvariabele:

  1. Meld u aan bij uw Azure DevOps-organisatie en navigeer vervolgens naar uw project.

  2. Selecteer Pijplijnen, selecteer uw pijplijn en selecteer Vervolgens Bewerken om uw pijplijn te bewerken.

  3. Selecteer variabelen in de rechterbovenhoek en selecteer vervolgens het + teken om een nieuwe variabele te maken.

  4. Geef een naam op voor de variabele en plak vervolgens uw persoonlijke toegangstoken in het tekstvak Waarde .

  5. Zorg ervoor dat u het selectievakje Dit waardegeheim behouden inschakelt. Selecteer OK wanneer u klaar bent. U bent nu klaar om uw variabele in uw pijplijn te gebruiken.

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)