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 voor het opslaan van PowerShell-modules
  • PowerShell-modules maken, verpakken en publiceren
  • Verbinding maken met 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 & beheren.

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

    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 als volgt door het pad naar het bestand Get-Hello.psm1 :

    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 = @('PSModule.psm1',
                 'PSGet.Format.ps1xml',
                 'PSGet.Resource.psd1')
    

Module inpakken en publiceren

  1. Maak een .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 de 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 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. Publiceer het pakket naar uw feed.

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

    Een schermopname van het gepubliceerde pakket.

Notitie

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

Verbinding maken met feed als een PowerShell-opslagplaats

Belangrijk

PowerShell biedt geen ondersteuning voor versie 3 van NuGet.

  1. Open een PowerShell-promptvenster met verhoogde bevoegdheid.

  2. Stel uw referenties in om te verifiëren 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 te navigeren naar Artifacts>Connect to Feed>NuGet.exe under Project setup source URL.

    • Project-scoped feed:
    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:

    • Project-scoped feed:
    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

    Als u de volgende waarschuwing Unable to resolve package sourceziet, start u de PowerShell-sessie opnieuw.

  4. Registreer de pakketbron:

    • Project-scoped feed:
    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 zoeken.

    Find-Module -Repository PowershellAzureDevopsServices
    
  7. Voer de volgende opdracht uit als u de module Get-Hello 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

Verbinding maken met feed met Azure Pipelines

In het volgende voorbeeld ziet u hoe u een PowerShell-module verifieert en installeert met een YAML-pijplijn.

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