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
- NuGet.exe
- Azure Artifacts Credential Provider
- Eine Azure DevOps-Organisation. Erstellen Sie eine organization, falls Sie noch keines haben.
- Ein Azure Artifacts-Feed. Erstellen Sie einen neuen Feed, wenn Sie noch keinen haben.
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 .
Navigieren Sie zu Ihrer Azure DevOps-Organisation
https://dev.azure.com/<ORGANIZATION_NAME>/
Wählen Sie das Symbol "Benutzereinstellungen" und dann " Persönliche Zugriffstoken" aus.
Neues Token auswählen
Geben Sie einen Namen für Ihren PAT ein, und wählen Sie dann ein Ablaufdatum aus.
Wählen Sie "Benutzerdefiniert" und dann "Verpacken>lesen", "Schreiben" und "Verwalten" aus.
Wählen Sie Erstellen, wenn Sie fertig sind. Kopieren und speichern Sie Ihren PAT an einem sicheren Ort.
Erstellen eines Moduls
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
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." }
Erstellen Sie das Modulmanifest, indem Sie den folgenden Befehl in Ihrem Get-Hello-Verzeichnispfad ausführen.
New-ModuleManifest -Path .\Get-Hello.psd1
Ö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'
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')
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
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
Führen Sie den folgenden Befehl aus, um Ihr Modul zu packen.
nuget pack Get-Hello.nuspec
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>"
Veröffentlichen Sie das Paket in Ihrem Feed.
nuget push -Source "<FEED_NAME>" -ApiKey "<ANY_STRING>" "<PACKAGE_PATH>"
Wichtig
Die Versionsnummer im Modulmanifest (PSD1) und die NUSPEC-Datei muss übereinstimmen.
Verbinden als PowerShell-Repository zu feeden
Öffnen Sie ein PowerShell-Eingabeaufforderungsfenster mit erhöhten Rechten.
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)
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.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
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
Führen Sie den folgenden Befehl aus, wenn Sie alle Module im Repository suchen möchten.
Find-Module -Repository PowershellAzureDevopsServices
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:
Melden Sie sich bei Ihrer Azure DevOps-Organisation an, und navigieren Sie dann zu Ihrem Projekt.
Wählen Sie "Pipelines" aus, wählen Sie Ihre Pipeline und dann "Bearbeiten" aus, um Ihre Pipeline zu bearbeiten.
Wählen Sie "Variablen" in der oberen rechten Ecke aus, und wählen Sie dann das + Zeichen aus, um eine neue Variable zu erstellen.
Geben Sie einen Namen für Ihre Variable ein, und fügen Sie dann Ihr persönliches Zugriffstoken in das Textfeld "Wert " ein.
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)
Verwandte Artikel
Feedback
https://aka.ms/ContentUserFeedback.
Bald verfügbar: Im Laufe des Jahres 2024 werden wir GitHub-Issues stufenweise als Feedbackmechanismus für Inhalte abbauen und durch ein neues Feedbacksystem ersetzen. Weitere Informationen finden Sie unterFeedback senden und anzeigen für