Freigeben über


Verwenden eines Azure Artifacts-Feeds als privates PowerShell-Repository

Azure DevOps Services

Azure Artifacts bietet eine einfache Möglichkeit, PowerShell-Skripts in teamsübergreifend zu teilen, um die Zusammenarbeit zu fördern und die Effektivität zu maximieren. Indem Sie PowerShell-Module in einem privaten Repository speichern, können Sie Mitgliedern Ihres Teams die Möglichkeit geben, diese Skripts schnell mithilfe der Befehlszeile herunterzuladen oder zu aktualisieren.

Dieser Artikel führt Sie durch das Einrichten Ihres Azure Artifacts-Feeds als privates PowerShell-Repository zum Speichern und Freigeben Ihrer PowerShell-Module. Sie lernen Folgendes:

  • Erstellen eines persönlichen Zugriffstokens
  • Erstellen eines neuen Feeds zum Speichern von PowerShell-Modulen
  • Erstellen, Packen und Veröffentlichen von PowerShell-Modulen
  • Verbinden zu einem Feed mit PowerShell
  • Verwenden des privaten PowerShell-Repositorys mit Azure-Pipelines

Voraussetzungen

Erstellen eines persönlichen Zugriffstokens

Die Verwendung eines persönlichen Zugriffstokens (PERSONAL Access Token, PAT) ist eine hervorragende Möglichkeit, sich bei Azure DevOps zu authentifizieren, ohne Ihre primären Anmeldeinformationen zu verwenden. Weitere Details finden Sie unter Verwenden von persönlichen Zugriffstoken .

  1. Navigieren Sie zu Ihrer Azure DevOps-Organisation https://dev.azure.com/<ORGANIZATION_NAME>/

  2. Wählen Sie das Symbol "Benutzereinstellungen" und dann " Persönliche Zugriffstoken" aus.

    Screenshot, der zeigt, wie Sie ein persönliches Zugriffstoken erstellen.

  3. Neues Token auswählen

  4. Geben Sie einen Namen für Ihren PAT ein, und wählen Sie dann ein Ablaufdatum aus.

  5. Wählen Sie "Benutzerdefiniert" und dann "Verpacken>lesen", "Schreiben" und "Verwalten" aus.

  6. Wählen Sie Erstellen, wenn Sie fertig sind. Kopieren und speichern Sie Ihren PAT an einem sicheren Ort.

    Screenshot, der zeigt, wie sie ein neues persönliches Zugriffstoken einrichten.

Erstellen eines Moduls

  1. Erstellen Sie einen neuen Ordner "Get-Hello". Navigieren Sie in Ihrem Ordner, und erstellen Sie eine neue Datei "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. Fügen Sie das folgende Skript in die Datei "Get-Hello.psm1 " ein:

    Function Get-Hello{
        Write-Host "Hello from my Azure DevOps Services Package."
    }
    
  3. Erstellen Sie das Modulmanifest, indem Sie den folgenden Befehl in Ihrem Get-Hello-Verzeichnispfad ausführen.

    New-ModuleManifest -Path .\Get-Hello.psd1
    
  4. Öffnen Sie die Datei "Get-Hello.psd1 ", und suchen Sie die RootModule Variable. Ersetzen Sie die leere Zeichenfolge durch den Pfad zur Datei "Get-Hello.psm1 " wie folgt:

    RootModule = 'Get-Hello.psm1'
    
  5. Der FunctionsToExport Abschnitt soll die Liste der Funktionen definieren, die aus diesem Modul exportiert werden. Fügen Sie Die Get-Hello-Funktion wie folgt hinzu:

    FunctionsToExport = @('Get-Hello')
    
  6. Suchen Sie den FileList Abschnitt, und fügen Sie die folgende Liste der Dateien hinzu, die mit Ihrem Modul verpackt werden sollen.

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

Packen und Veröffentlichen des Moduls

  1. Erstellen Sie nuspec-Datei für Ihr Modul. Mit diesem Befehl wird eine Get-Hello.nuspec-Datei erstellt, die Metadaten enthält, die zum Packen des Moduls erforderlich sind.

    nuget spec Get-Hello
    
  2. Führen Sie den folgenden Befehl aus, um Ihr Modul zu packen.

    nuget pack Get-Hello.nuspec
    
  3. Führen Sie den folgenden Befehl aus, um Die Feedquell-URL hinzuzufügen. NuGet v3 wird nicht unterstützt, stellen Sie sicher, dass Sie v2 in Ihrer Feedquell-URL verwenden.

    • Organisationsbereichsfeed:

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

      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. Veröffentlichen Sie das Paket in Ihrem Feed.

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

    Screenshot des veröffentlichten Pakets.

Wichtig

Die Versionsnummer im Modulmanifest (PSD1) und die NUSPEC-Datei muss übereinstimmen.

Verbinden als PowerShell-Repository zu feeden

  1. Öffnen Sie ein PowerShell-Eingabeaufforderungsfenster mit erhöhten Rechten.

  2. Richten Sie Ihre Anmeldeinformationen für die Authentifizierung mit Azure Artifacts ein. Ersetzen Sie die Platzhalter durch die entsprechenden Informationen.

    $patToken = "<PERSONAL_ACCESS_TOKEN>" | ConvertTo-SecureString -AsPlainText -Force
    
    $credsAzureDevopsServices = New-Object System.Management.Automation.PSCredential("<USER_NAME>", $patToken)
    
  3. Registrieren Sie Ihr PowerShell-Repository. Der SourceLocation Link kann gefunden werden, indem Sie zu Artefakten> navigieren Verbinden zum Feed>NuGet.exe unter der Url der Project-Setupquelle navigieren.

    • Projektbezogener 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
      
    • Organisationsbereichsfeed:

      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
      

    Wenn Sie weiterhin die älteren visualstudio.com URLs verwenden, verwenden Sie stattdessen den folgenden Befehl:

    • Projektbezogener 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
      
    • Organisationsbereichsfeed:

      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
      

    Tipp

    Bestimmte Versionen von PowerShell erfordern einen Neustart einer neuen Sitzung nach dem Ausführen des Register-PSRepository Cmdlets, um zu vermeiden, dass die Paketquellwarnung nicht aufgelöst werden kann.

  4. Registrieren Sie Ihre Paketquelle:

    • Projektbezogener 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
      
    • Organisationsbereichsfeed:

      Register-PackageSource -Name "PowershellAzureDevopsServices" -Location "https://pkgs.dev.azure.com/<ORGANIZATION_NAME>/_packaging/<FEED_NAME>/nuget/v2" -ProviderName NuGet -Trusted -SkipValidate -Credential $credsAzureDevopsServices 
      
  5. Führen Sie den folgenden Befehl aus, um zu bestätigen, ob das Repository erfolgreich registriert wurde. Dieser Befehl ruft alle registrierten Repositorys für den aktuellen Benutzer ab:

    Get-PSRepository
    
  6. Führen Sie den folgenden Befehl aus, wenn Sie alle Module im Repository suchen möchten.

    Find-Module -Repository PowershellAzureDevopsServices
    
  7. Führen Sie den folgenden Befehl aus, wenn Sie das Get-Hello-Modul installieren möchten.

    Install-Module -Name Get-Hello -Repository PowershellAzureDevopsServices
    

Wenn der Befehl "Install-Module " den folgenden Fehler zurückgibt: Die Paketquelle kann nicht aufgelöst werden, führen Sie das Register-PackageSource Cmdlet erneut mit dem Trusted Flag wie folgt aus:

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

Hinweis

Wenn Ihre Organisation eine Firewall oder einen Proxy-Server verwendet, stellen Sie sicher, dass Sie Azure Artifacts-Domänen-URLs und IP-Adressen zulassen.

Registrieren und Installieren des Moduls mithilfe von Azure Pipelines

In diesem Beispiel wird der Prozess der Authentifizierung und Installation eines PowerShell-Moduls mithilfe einer YAML-Pipeline veranschaulicht. Um Ihr persönliches Zugriffstoken in der Pipeline zu verwenden, sollten Sie es wie folgt als Pipelinevariable einschließen:

  1. Melden Sie sich bei Ihrer Azure DevOps-Organisation an, und navigieren Sie dann zu Ihrem Projekt.

  2. Wählen Sie "Pipelines" aus, wählen Sie Ihre Pipeline und dann "Bearbeiten" aus, um Ihre Pipeline zu bearbeiten.

  3. Wählen Sie "Variablen" in der oberen rechten Ecke aus, und wählen Sie dann das + Zeichen aus, um eine neue Variable zu erstellen.

  4. Geben Sie einen Namen für Ihre Variable ein, und fügen Sie dann Ihr persönliches Zugriffstoken in das Textfeld "Wert " ein.

  5. Stellen Sie sicher, dass Sie das Kontrollkästchen "Diesen Wert geheim halten " aktivieren. Wählen Sie "OK" aus, wenn Sie fertig sind. Sie sind jetzt bereit, Ihre Variable in Ihrer Pipeline zu verwenden.

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)