Publier des packages NuGet avec Azure Pipelines (YAML/Classic)
Azure DevOps Services | Azure DevOps Server 2022 | Azure DevOps Server 2019
En utilisant Azure Pipelines, vous pouvez publier vos packages NuGet sur les flux Azure Artifacts de votre organisation, dans d’autres organisations, et sur des registres publics tels que nuget.org, en utilisant soit les pipelines Classic, soit YAML. Dans cet article, vous allez apprendre à :
- Publier des packages sur un flux interne
- Publier des packages sur un flux dans une autre organisation
- Contrôle de version des packages
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.
Si vous utilisez un agent auto-hébergé, assurez-vous qu’il dispose du .NET Core SDK (2.1.400+) et de NuGet (4.8.0.5385+) installés.
Publier des packages NuGet sur un flux dans la même organisation
Remarque
Pour publier vos packages dans un flux avec Azure Pipelines, assurez-vous que les identités du service de build de la collection de projets et du service de build de votre projet disposent du rôle d'éditeur de flux (contributeur) dans les paramètres de votre flux. Consultez la section Gérer les permissions pour plus de détails.
Connectez-vous à votre organisation Azure DevOps puis accédez à votre projet.
Sélectionnez Pipelines, puis sélectionnez la définition de votre pipeline.
Sélectionnez Modifier, puis ajoutez l’extrait suivant à votre pipeline YAML.
steps:
- task: NuGetToolInstaller@1 # Minimum required NuGet version: 4.8.0.5385+.
displayName: 'NuGet Tool Installer'
- task: NuGetAuthenticate@0
displayName: 'NuGet Authenticate'
- script: |
nuget.exe push -Source "https://pkgs.dev.azure.com/<ORGANIZATION_NAME>/<PROJECT_NAME>/_packaging/<FEED_NAME>/nuget/v3/index.json" -ApiKey az $(Build.ArtifactStagingDirectory)\*.nupkg
displayName: Push
Connectez-vous à votre organisation Azure DevOps puis accédez à votre projet.
Sélectionnez Pipelines, puis sélectionnez la définition de votre pipeline.
Sélectionnez Modifier, puis ajoutez l’extrait suivant à votre pipeline YAML.
steps:
- task: NuGetToolInstaller@1 # Minimum required NuGet version: 4.8.0.5385+.
displayName: 'NuGet Tool Installer'
- task: NuGetAuthenticate@1
displayName: 'NuGet Authenticate'
- script: |
nuget.exe push -Source "https://pkgs.dev.azure.com/<ORGANIZATION_NAME>/<PROJECT_NAME>/_packaging/<FEED_NAME>/nuget/v3/index.json" -ApiKey az $(Build.ArtifactStagingDirectory)\*.nupkg
displayName: Push
Publier des packages NuGet sur un flux dans une autre organisation
Pour publier vos packages NuGet sur un flux dans une autre organisation Azure DevOps, vous devez d’abord créer un jeton d’accès personnel (PAT) dans l’organisation cible. Accédez à l’organisation hébergeant votre flux cible et créez un jeton d’accès personnel avec l’étendue Packaging>Lecture & écriture. Une fois le PAT créé, copiez-le et stockez-le dans un endroit sécurisé, car vous en aurez besoin dans la section suivante pour configurer une connexion de service.
Connectez-vous à l’organisation Azure DevOps où votre pipeline sera exécuté, puis accédez à votre projet.
Accédez aux Paramètres du projet>Connexions de service.
Sélectionnez Nouvelle connexion de service, sélectionnez NuGet, puis sélectionnez Suivant.
Sélectionnez Serveur Azure DevOps externe comme Méthode d’authentification, puis saisissez l’URL du flux cible. Collez le jeton d’accès personnel que vous avez créé précédemment, donnez un nom à votre connexion de service, et cochez Accorder la permission d’accès à tous les pipelines si cela s’applique à votre scénario.
Lorsque vous avez terminé, sélectionnez Enregistrer.
Connectez-vous à votre organisation Azure DevOps puis accédez à votre projet.
Sélectionnez Pipelines, puis sélectionnez la définition de votre pipeline.
Sélectionnez Modifier, puis ajoutez l’extrait suivant à votre pipeline YAML.
- task: NuGetToolInstaller@1 # Minimum required NuGet version: 4.8.0.5385+. displayName: 'NuGet Tool Installer' - task: NuGetAuthenticate@1 inputs: nuGetServiceConnections: <SERVICE_CONNECTION_NAME> - script: | nuget.exe push -Source "https://pkgs.dev.azure.com/<ORGANIZATION_NAME>/<PROJECT_NAME>/_packaging/<FEED_NAME>/nuget/v3/index.json" -ApiKey az $(Build.ArtifactStagingDirectory)\*.nupkg displayName: Push
Connectez-vous à votre organisation Azure DevOps puis accédez à votre projet.
Sélectionnez Pipelines, puis sélectionnez la définition de votre pipeline.
Sélectionnez Modifier, puis ajoutez l’extrait suivant à votre pipeline YAML.
- task: NuGetToolInstaller@1 # Minimum required NuGet version: 4.8.0.5385+. displayName: 'NuGet Tool Installer' - task: NuGetAuthenticate@0 inputs: nuGetServiceConnections: <SERVICE_CONNECTION_NAME> - script: | nuget.exe push -Source "https://pkgs.dev.azure.com/<ORGANIZATION_NAME>/<PROJECT_NAME>/_packaging/<FEED_NAME>/nuget/v3/index.json" -ApiKey az $(Build.ArtifactStagingDirectory)\*.nupkg displayName: Push
Versioning de package avec la tâche NuGet
Azure Pipelines prend en charge la gestion sémantique des versions et propose les options de configuration suivantes pour les tâches NuGet :
Utiliser la date et l’heure (Classique) | byPrereleaseNumber (YAML) : la version de votre package suivra le format : Major.Minor.Patch-ci-datetime, où vous avez la flexibilité de personnaliser les valeurs Major, Minor et Patch.
Utiliser une variable d'environnement (Classique) | byEnvVar (YAML) : La version de votre package est définie par la valeur de la variable d'environnement spécifiée.
Utiliser le numéro de build (Classique) | byBuildNumber (YAML) : La version de votre package correspond au numéro de build. Veillez à définir le format du numéro de build dans votre pipeline Options comme
$(BuildDefinitionName)_$(Year:yyyy).$(Month).$(DayOfMonth)$(Rev:.r)
. Pour spécifier le format en YAML, ajoutez une propriéténame:
à la racine de votre pipeline et définissez votre format.
Voici un exemple démontrant comment utiliser le contrôle de version par date et heure pour générer un package conforme à SemVer au format : Major.Minor.Patch-ci-datetime.
variables:
Major: '1'
Minor: '0'
Patch: '0'
steps:
- task: NuGetCommand@2
inputs:
command: pack
versioningScheme: byPrereleaseNumber
majorVersion: '$(Major)'
minorVersion: '$(Minor)'
patchVersion: '$(Patch)'
Remarque
Les packages DotNetCore
et DotNetStandard
doivent être empaquetés avec la tâche DotNetCoreCLI@2
pour éviter System.InvalidCastExceptions. Pour plus d’informations, consultez la tâche .NET Core 2.0.
task: DotNetCoreCLI@2
inputs:
command: pack
versioningScheme: byPrereleaseNumber
majorVersion: '$(Major)'
minorVersion: '$(Minor)'
patchVersion: '$(Patch)'