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
- NuGet.exe
- Een Azure DevOps-organisatie. Maak een organisatie als u er nog geen hebt.
- Een Azure Artifacts-feed. Maak een nieuwe feed als u er nog geen hebt.
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.
Navigeer naar uw Azure DevOps-organisatie
https://dev.azure.com/<ORGANIZATION_NAME>/Selecteer het pictogram Gebruikersinstellingen en selecteer vervolgens Persoonlijke toegangstokens.
Nieuw token selecteren
Voer een naam in voor uw PAT en kies vervolgens een vervaldatum .
Selecteer Aangepast gedefinieerd en selecteer vervolgens Verpakking>lezen, schrijven & beheren.
Selecteer Maken wanneer u klaar bent. Kopieer en sla uw PAT op een veilige locatie op.
Een module maken
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 manifestPlak het volgende script in uw Get-Hello.psm1-bestand :
Function Get-Hello{ Write-Host "Hello from my Azure DevOps Services Package." }Maak het modulemanifest door de volgende opdracht uit te voeren in het mappad Get-Hello .
New-ModuleManifest -Path .\Get-Hello.psd1Open het bestand Get-Hello.psd1 en zoek de
RootModulevariabele. Vervang de lege tekenreeks als volgt door het pad naar het bestand Get-Hello.psm1 :RootModule = 'Get-Hello.psm1'De
FunctionsToExportsectie 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')Zoek de
FileListsectie 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
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-HelloVoer de volgende opdracht uit om de module in te pakken.
nuget pack Get-Hello.nuspecVoer 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>"Publiceer het pakket naar uw feed.
nuget push -Source "<FEED_NAME>" -ApiKey "<ANY_STRING>" "<PACKAGE_PATH>"
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.
Open een PowerShell-promptvenster met verhoogde bevoegdheid.
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)Registreer uw PowerShell-opslagplaats. De
SourceLocationkoppeling 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 $credsAzureDevopsServicesAls u nog steeds de oudere
visualstudio.comURL'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 $credsAzureDevopsServicesTip
Als u de volgende waarschuwing
Unable to resolve package sourceziet, start u de PowerShell-sessie opnieuw.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 $credsAzureDevopsServicesVoer 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-PSRepositoryVoer de volgende opdracht uit als u alle modules in de opslagplaats wilt zoeken.
Find-Module -Repository PowershellAzureDevopsServicesVoer 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