Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
Azure DevOps Services
Azure Artifacts fournit une solution pratique pour partager des scripts PowerShell. En utilisant des flux Azure Artifacts, vous pouvez publier en toute transparence vos modules PowerShell à partir de la ligne de commande et contrôler l’accès à ces modules via vos paramètres de flux. Cet article vous guide tout au long de la configuration de votre flux Azure Artifacts en tant que référentiel PowerShell privé pour stocker et partager vos modules PowerShell.
Dans cet article, vous allez apprendre à :
- Créer un jeton d’accès personnel
- Créer un module PowerShell
- Créez un coffre SecretStore et enregistrez un dépôt
- Publier et consommer des packages à partir d’un flux
Prérequis
Créez une Organisation Azure DevOps et un Projet si ce n’est pas déjà fait.
Créez un nouveau flux si vous n’en avez pas déjà un.
Installez PowerShell 6.0 ou version ultérieure pour vous assurer que vous disposez de la version PowerShellGet requise pour installer PSResourceGet.
Installez PSResourceGet.
Installez les modules SecretManagement et SecretStore .
Remarque
Le fournisseur d’informations d’identification Azure Artifacts n’est pas pris en charge avec PSResourceGet.
Créer un jeton d’accès personnel
Un jeton d’accès personnel agit comme votre identité numérique et sert de mot de passe alternatif pour vous authentifier auprès d’Azure DevOps.
Accédez à votre organisation Azure DevOps
https://dev.azure.com/<ORGANIZATION_NAME>/Sélectionnez l’icône paramètres utilisateur, sélectionnez Jetons d’accès personnels, puis nouveau jeton.
Saisissez un nom pour votre PAT, définissez une date d'expiration, sélectionnez Personnalisé, puis sélectionnez Emballage>Lire, écrire &gérer.
Sélectionnez Créer lorsque vous avez terminé, puis veillez à copier et stocker votre PAT dans un emplacement sûr.
Créer un module PowerShell
Si vous n’avez pas votre propre module, suivez les instructions de cette section pour créer un exemple de module PowerShell. Sinon, passez à l’étape suivante :
Créez un dossier PowerShell-Demo. Accédez à votre dossier et créez un fichier PowerShell-Demo.psm1.
Collez le script suivant dans votre fichier PowerShell-Demo.psm1 :
Function PowerShell-Demo{ Write-Host "Hello World!" }Générez le manifeste du module en exécutant la commande suivante dans votre répertoire PowerShell-Demo :
New-ModuleManifest -Path .\PowerShell-Demo.psd1Ouvrez votre fichier PowerShell-Demo.psd1 et recherchez la
RootModulevariable. Ce paramètre spécifie le fichier de script principal que PowerShell charge lorsque le module est importé. Remplacez la chaîne vide par le chemin d’accès à votre fichier PowerShell-Demo.psm1 :RootModule = 'PowerShell-Demo.psm1'La
FunctionsToExportsection spécifie les fonctions accessibles aux utilisateurs lorsqu’elles importent votre module. Incluez votre fonction PowerShell-Demo :FunctionsToExport = @('PowerShell-Demo')Recherchez la
FileListsection, qui répertorie les fichiers inclus lors de l’empaquetage du module. Ajoutez le fichier que vous souhaitez empaqueter avec votre module :FileList = @('./PowerShell-Demo.psm1')
Inscrire un référentiel
Exécutez la commande suivante pour créer un objet d’informations d’identification. Remplacez les espaces réservés par les informations appropriées.
$username = "<USER_NAME>" $patToken = "<PERSONAL_ACCESS_TOKEN>" | ConvertTo-SecureString -AsPlainText -Force $credentials = New-Object System.Management.Automation.PSCredential($username, $patToken)Vérifiez que SecretManagement et SecretStore sont installés, puis exécutez la commande suivante pour créer un coffre et ajouter un secret :
Register-SecretVault -Name "MySecretVault" -ModuleName Microsoft.PowerShell.SecretStore -DefaultVault Set-Secret -Name "MyCredential" -Secret $credentials -Vault "MySecretVault" $CredentialInfo = [Microsoft.PowerShell.PSResourceGet.UtilClasses.PSCredentialInfo]::new('MySecretVault', 'MyCredential')Pour vérifier que l'espace de stockage et le secret ont été créés avec succès, exécutez la commande suivante pour dresser la liste de tous vos secrets :
PS > Get-SecretInfo Name Type VaultName ---- ---- --------- MyCredential PSCredential MySecretVaultExécutez la commande suivante pour inscrire votre référentiel PowerShell. Vous pouvez trouver le
SourceLocationlien en accédant à Artifacts>Connect to Feed>NuGet.exe, dans la section Configuration du projet sous l'URL source.Aliments pour animaux à l'échelle d'un projet :
Register-PSResourceRepository -Name "PowershellPSResourceRepository" ` -Uri "https://pkgs.dev.azure.com/<ORGANIZATION_NAME>/<PROJECT_NAME>/_packaging/<FEED_NAME>/nuget/v3/index.json" ` -Trusted ` -CredentialInfo $CredentialInfoFlux à l'échelle de l'organisation :
Register-PSResourceRepository -Name "PowershellPSResourceRepository" ` -Uri "https://pkgs.dev.azure.com/<ORGANIZATION_NAME>/_packaging/<FEED_NAME>/nuget/v3/index.json" ` -Trusted ` -CredentialInfo $CredentialInfo
Conseil
Certaines versions de PowerShell peuvent nécessiter le démarrage d'une nouvelle session après l'exécution de l'applet
Register-PSResourceRepositoryde commande pour empêcher l'apparition de l'avertissement Impossible de résoudre la source du package.Pour vérifier si le référentiel a été correctement inscrit, exécutez la commande suivante pour récupérer tous les référentiels inscrits pour l’utilisateur actuel :
Get-PSResourceRepository
Remarque
Si vous rencontrez l’erreur : le code d’état de la réponse n’indique pas la réussite : 404 (Introuvable). Assurez-vous que votre URL source pointe vers nuget/v3/index.json au lieu de nuget/v2.
Publier un package
Exécutez la commande suivante pour publier le package dans votre flux. Remplacez les espaces réservés par le chemin d’accès de votre package, le nom du dépôt, l’objet d’informations d’identification que vous avez créé précédemment, puis saisissez n’importe quelle chaîne pour l’ApiKey.
Publish-PSResource -Path <PACKAGE_PATH> -Repository <REPOSITORY_NAME> -Credential $credentials -ApiKey <ANY_STRING>
Exemple :
PS C:\AzureDevOps\Demos\PowerShellDemo> Publish-PSResource -Path .\scripts\ -Repository FabrikamFiberFeed -Credential $credentials -ApiKey az -verbose
VERBOSE: Performing the operation "Publish-PSResource" on target "Publish resource
'C:\AzureDevOps\Demos\PowerShellDemo\scripts\' from the machine".
VERBOSE: The newly created nuspec is:
C:\Users\xxxx\AppData\Local\Temp\xxxxxxxxx\PowerShell-Demo.nuspec
VERBOSE: credential successfully read from vault and set for repository: FabrikamFiberFeed
VERBOSE: Successfully packed the resource into a .nupkg
VERBOSE: Successfully published the resource to
'https://pkgs.dev.azure.com/ramiMSFTDevOps/DemoProject/_packaging/FabrikamFiberFeed/nuget/v3/index.json'
VERBOSE: Deleting temporary directory 'C:\Users\xxxx\AppData\Local\Temp\xxxxxxx'
Installer un package
Pour vérifier si le module est disponible dans votre référentiel, utilisez la commande suivante pour la rechercher :
Find-PSResource -Name <RESOURCE_NAME> -Repository <REPOSITORY_NAME> -verboseExécutez la commande suivante pour installer la dernière version stable de votre module :
Install-PSResource <MODULE_NAME>
Conseil
Si vous rencontrez l’erreur : Exception appelant « WriteObject ». Démarrez une nouvelle fenêtre PowerShell et exécutez Get-SecretInfo. Entrez votre mot de passe de coffre avant d'exécuter Find-PSResource et Install-PSResource, car le délai d'expiration de SecretStore peut expirer. PasswordTimeout par défaut est de 900 secondes, mais vous pouvez modifier cette valeur si nécessaire. Pour plus d’informations, consultez Utiliser SecretStore dans l’automatisation .
Dans cet article, vous allez apprendre à :
- Créer un jeton d’accès personnel
- Créer, empaqueter et publier un module PowerShell
- Se connecter à un flux en tant que référentiel PowerShell
- Inscrire et installer un module PowerShell à l’aide d’Azure Pipelines
Prérequis
Créez une Organisation Azure DevOps et un Projet si ce n’est pas déjà fait.
Créez un nouveau flux si vous n’en avez pas déjà un.
Installez le fournisseur d'informations d'identification Azure Artifacts.
Installez Windows MSBuild à l’aide de l’une des options suivantes :
Installez NuGet(.exe) version 4.8.0.5385 ou ultérieure.
Installez la version 8.0.x ou ultérieure du moteur d'exécution dotnet.
Installez PowerShell 6.0 ou version ultérieure pour vous assurer que vous disposez des versions PowerShellGet et PackageManagement appropriées.
Créer un jeton d’accès personnel
Un jeton d’accès personnel agit comme votre identité numérique et sert de mot de passe alternatif pour vous authentifier auprès d’Azure DevOps.
Accédez à votre organisation Azure DevOps
https://dev.azure.com/<ORGANIZATION_NAME>/Sélectionnez l’icône paramètres utilisateur, sélectionnez Jetons d’accès personnels, puis nouveau jeton.
Saisissez un nom pour votre PAT, définissez une date d'expiration, sélectionnez Personnalisé, puis sélectionnez Emballage>Lire, écrire &gérer.
Sélectionnez Créer lorsque vous avez terminé, puis veillez à copier et stocker votre PAT dans un emplacement sûr.
Créer un module PowerShell
Si vous n’avez pas votre propre module, suivez les instructions de cette section pour créer un exemple de module PowerShell. Sinon, passez à l’étape suivante :
Créez un dossier Get-Hello. Accédez à votre dossier et créez un fichier Get-Hello.psm1.
Collez le script suivant dans votre fichier Get-Hello.psm1 :
Function Get-Hello{ Write-Host "Hello Azure DevOps!" }Générez le manifeste du module en exécutant la commande suivante dans votre répertoire Get-Hello :
New-ModuleManifest -Path .\Get-Hello.psd1Ouvrez votre fichier Get-Hello.psd1 et recherchez la
RootModulevariable. Ce paramètre spécifie le fichier de script principal que PowerShell charge lorsque le module est importé. Remplacez la chaîne vide par le chemin d’accès à votre fichier Get-Hello.psm1 :RootModule = 'Get-Hello.psm1'La
FunctionsToExportsection spécifie les fonctions accessibles aux utilisateurs lorsqu’elles importent votre module. Incluez votre fonction Get-Hello :FunctionsToExport = @('Get-Hello')Recherchez la
FileListsection, qui spécifie les fichiers inclus lors de l’empaquetage du module. Ajoutez le fichier que vous souhaitez empaqueter avec votre module :FileList = @('./Get-Hello.psm1')
Empaqueter et publier un module
Générez un fichier nuspec pour votre module. Cette commande crée un fichier Get-Hello.nuspec contenant les métadonnées nécessaires pour empaquetage du module :
nuget spec Get-HelloExécutez la commande suivante pour empaqueter votre module :
nuget pack Get-Hello.nuspecExécutez la commande suivante pour ajouter l’URL de votre source de flux. Assurez-vous d'utiliser V2 dans votre URL source de flux, car NuGet V3 n’est pas pris en charge.
Flux à l'échelle de l'organisation :
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>"Aliments pour animaux à l'échelle d'un projet :
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>"
Publiez le package dans votre flux :
nuget push -Source "<FEED_NAME>" -ApiKey "<ANY_STRING>" "<PACKAGE_PATH>"
Importante
Le numéro de version de votre manifeste de module (.psd1) doit être identique au numéro de version dans votre fichier .nuspec .
Se connecter à un flux en tant que référentiel PowerShell
Cette section vous guide tout au long de l’authentification avec un flux en tant que référentiel PowerShell et en consommant un module hébergé dans votre flux :
Dans une fenêtre d’invite PowerShell, exécutez la commande suivante pour configurer vos informations d’identification. Remplacez les espaces réservés par les informations appropriées.
$patToken = "<PERSONAL_ACCESS_TOKEN>" | ConvertTo-SecureString -AsPlainText -Force $credsAzureDevopsServices = New-Object System.Management.Automation.PSCredential("<USER_NAME>", $patToken)Inscrivez votre référentiel PowerShell. Vous pouvez trouver le
SourceLocationlien en accédant à Artifacts>Connect to Feed>NuGet.exe, dans la section Configuration du projet sous l'URL source.Aliments pour animaux à l'échelle d'un projet :
Register-PSRepository -Name <REPOSITORY_NAME> -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 $credsAzureDevopsServicesFlux à l'échelle de l'organisation :
Register-PSRepository -Name <REPOSITORY_NAME> -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
Conseil
Certaines versions de PowerShell peuvent nécessiter le démarrage d'une nouvelle session après l'exécution de l'applet
Register-PSRepositoryde commande pour empêcher l'apparition de l'avertissement Impossible de résoudre la source du package.Inscrivez votre source de package :
Aliments pour animaux à l'échelle d'un projet :
Register-PackageSource -Name <REPOSITORY_NAME> -Location "https://pkgs.dev.azure.com/<ORGANIZATION_NAME>/<PROJECT_NAME>/_packaging/<FEED_NAME>/nuget/v2" -ProviderName NuGet -Trusted -SkipValidate -Credential $credsAzureDevopsServicesFlux à l'échelle de l'organisation :
Register-PackageSource -Name <REPOSITORY_NAME> -Location "https://pkgs.dev.azure.com/<ORGANIZATION_NAME>/_packaging/<FEED_NAME>/nuget/v2" -ProviderName NuGet -Trusted -SkipValidate -Credential $credsAzureDevopsServices
Remarque
- Register-PSRepository : utilisé pour inscrire un référentiel PowerShell pour rechercher et installer des modules.
- Register-PackageSource : utilisé pour inscrire une source de package pour rechercher et publier des packages.
Pour vérifier si le référentiel a été correctement inscrit, exécutez la commande suivante pour récupérer tous les référentiels inscrits pour l’utilisateur actuel :
Get-PSRepositoryExécutez la commande suivante pour installer le module Get-Hello .
Install-Module -Name <PACKAGE_NAME> -Repository <REPOSITORY_NAME>
Remarque
Si votre organisation utilise un pare-feu ou un serveur proxy, veillez à autoriser l’accès aux URL et adresses IP du domaine Azure Artifacts.
Installez un package à partir de votre pipeline
Cet exemple vous guide tout au long de l’authentification avec un flux Azure Artifacts et l’installation d’un module PowerShell à partir de votre pipeline. Pour utiliser votre jeton d’accès personnel, ajoutez-le en tant que variable de pipeline, comme indiqué ci-dessous :
Connectez-vous à votre organisation Azure DevOps puis accédez à votre projet.
Sélectionnez Pipelines, sélectionnez votre définition de pipeline, puis sélectionnez Modifier pour modifier votre pipeline.
Sélectionnez Variables en haut à droite, puis sélectionnez Nouvelle variable.
Entrez un nom pour votre variable, puis collez votre jeton d’accès personnel dans la zone de texte Valeur .
Assurez-vous de sélectionner la case à cocher Garder cette valeur secrète. Sélectionnez Ok lorsque vous avez terminé.
Ajoutez une deuxième variable pour votre userName. Entrez un nom pour votre variable, puis entrez votre nom d’utilisateur dans la zone de texte Valeur .
Lorsque vous avez terminé, sélectionnez Enregistrer.
trigger:
- main
pool:
vmImage: 'Windows-latest'
variables:
PackageFeedEndpoint: 'https://pkgs.dev.azure.com/<ORGANIZATION_NAME>/<PROJECT_NAME>/_packaging/<FEED_NAME>/nuget/v2' ## For organization scoped feeds use'https://pkgs.dev.azure.com/<ORGANIZATION_NAME>/_packaging/<FEED_NAME>/nuget/v2'
steps:
- powershell: |
$pat = ConvertTo-SecureString ${env:pat_token} -AsPlainText -Force
$credential = New-Object System.Management.Automation.PSCredential("${env:userName}", $pat)
Register-PSRepository -Name <REPOSITORY_NAME> -SourceLocation "$(PackageFeedEndpoint)" -InstallationPolicy Trusted -Credential $credential
displayName: 'Register PSRepository'
env:
pat_token: $patToken
userName: $userName
- powershell: |
nuget install <PACKAGE_NAME> -Source "https://pkgs.dev.azure.com/<ORGANIZATION_NAME>/<PROJECT_NAME>/_packaging/<FEED_NAME>/nuget/v3/index.json"
displayName: 'Install module'