Publier des packages NuGet avec Azure Pipelines (YAML/Classic)

Azure DevOps Services | Azure DevOps Server 2022 - Azure DevOps Server 2019 | TFS 2018

Dans Azure Pipelines, vous pouvez utiliser l’éditeur classique ou les tâches YAML pour publier vos packages NuGet dans votre pipeline, dans votre flux Azure Artifacts ou dans des registres publics comme nuget.org.

Créer un package NuGet

Il existe différentes façons de créer vos packages NuGet, comme l’utilisation de Visual Studio pour empaqueter vos packages NuGet. Si vous utilisez déjà MSBuild ou une autre tâche pour créer vos packages, ignorez cette section et passez à la section Publier des packages NuGet.

Pour créer un package NuGet, ajoutez l’extrait de code suivant à votre fichier YAML de pipeline. Pour plus d’informations, veuillez consulter la section tâche NuGet.

- task: NuGetCommand@2
  inputs:
    command: pack
    packagesToPack: '**/*.csproj'
    packDestination: '$(Build.ArtifactStagingDirectory)'
  • packagesToPack : modèle pour rechercher les répertoires csproj à empaqueter
  • packDestination : répertoire dans lequel les paquets sont créés

YAML n’est pas pris en charge dans TFS.

Contrôle de version des packages

Les packages NuGet se distinguent par leur nom et leur numéro de version. L’utilisation de la gestion sémantique de version est une stratégie recommandée pour gérer efficacement les versions de package. Les versions sémantiques se composent de trois composants numériques : majeur, mineur et patch.

Le Patch est incrémentée après la correction d’un bug. Lorsque vous publiez une nouvelle fonctionnalité compatible avec les versions antérieures, vous incrémentez la version Mineure et réinitialisez la version du Patch à 0. Lorsque vous effectuez un changement incompatible avec les versions antérieures, vous incrémentez la version Principale et réinitialisez la version Mineure et la version du Patch à 0.

Avec la gestion sémantique de version, vous pouvez également utiliser des étiquettes de préversion pour étiqueter vos packages. Pour ce faire, entrez un trait d’union suivi de votre étiquette de préversion : par exemple, 1.0.0-beta. La gestion sémantique de version est prise en charge dans Azure Pipelines et peut être configurée dans votre tâche NuGet comme suit :

  • Utilisez la date et l’heure (Classique) : byPrereleaseNumber (YAML). La version de votre paquet est au format : Principale.Mineure.Patch-ci-date&heure vous donnant la flexibilité de choisir les valeurs des versions Principale, Mineure et du Patch.

  • Utiliser une variable d’environnement (Classique) : byEnvVar (YAML). La version de votre paquet est définie sur la valeur de la variable d’environnement que vous spécifiez.

  • Utilisez le numéro de build (Classique) : byBuildNumber (YAML). La version de votre paquet est définie sur le numéro de build. Veillez à définir le format de votre numéro de build sous les options de votre pipeline sur $(BuildDefinitionName)_$(Year:yyyy).$(Month).$(DayOfMonth)$(Rev:.r). Pour définir le format en YAML, ajoutez une propriété name: à la racine de votre pipeline et ajoutez votre format.

L’exemple suivant montre comment utiliser l’option date et heure du contrôle de version pour générer une version conforme à SemVer formatée comme suit : 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)'

YAML n’est pas pris en charge dans TFS.

Notes

Les packages DotNetCore et DotNetStandard doivent être empaquetés avec la tâche DotNetCoreCLI@2 pour éviter System.InvalidCastExceptions. Pour plus d’informations, veuillez consulter la section tâche CLI .NET Core.

task: DotNetCoreCLI@2
inputs:
    command: pack
    versioningScheme: byPrereleaseNumber
    majorVersion: '$(Major)'
    minorVersion: '$(Minor)'
    patchVersion: '$(Patch)'

Publier des packages NuGet

Pour publier des packages sur un flux Azure Artifacts à partir de votre pipeline, l’identité du pipeline doit avoir le rôle Éditeur de flux (Contributeur) sur le flux. Pour plus d’informations, consultez Autorisations des pipelines.

steps:
- task: NuGetAuthenticate@1
  displayName: 'NuGet Authenticate'
- task: NuGetCommand@2
  displayName: 'NuGet push'
  inputs:
    command: push
    publishVstsFeed: '<projectName>/<feed>'
    allowPackageConflicts: true

Pour publier un package dans un flux NuGet externe, vous devez d’abord créer une connexion de service pour vous connecter à ce flux. Pour créer une connexion de service :

  1. Rendez-vous dans Paramètres du projet>Connexions de service>Nouvelle connexion de service.
  2. Sélectionnez NuGet, puis sélectionnez Suivant.
  3. Remplissez le formulaire, puis sélectionnez Enregistrer lorsque vous avez terminé.

Pour plus d’informations, veuillez consulter la section Gérer les connexions de service.

Remarque

La tâche NuGetAuthenticate@1 prend en charge une connexion de service utilisant l’authentification de base. La tâche ne prend pas en charge l’authentification par clé API NuGet. Si votre connexion de service utilise ApiKey, vous devez utiliser la tâche NuGetCommand@2 et spécifier la clé API NuGet dans le champ arguments. Pour plus d’informations, veuillez consulter la section tâche NuGet.

Pour publier un package dans un flux NuGet externe, ajoutez l’extrait de code suivant à votre pipeline YAML.

Utilisation de latâche de ligne de commande (avec NuGet.exe) :

  - task: NuGetAuthenticate@1
    inputs:
      nuGetServiceConnections: <NAME_OF_YOUR_SERVICE_CONNECTION>

  - script: |
      nuget push <PACKAGE_PATH> -src https://pkgs.dev.azure.com/<ORGANIZATION_NAME>/<PROJECT_NAME>/_packaging/<FEED_NAME>/nuget/v3/index.json -ApiKey <ANY_STRING>
    displayName: "Push"          

Utilisation de latâche de ligne de commande (avec dotnet) :

  - task: NuGetAuthenticate@1
    inputs:
      nuGetServiceConnections: <NAME_OF_YOUR_SERVICE_CONNECTION>

  - script: |
      dotnet build <CSPROJ_PATH> --configuration <CONFIGURATION>
      dotnet pack <CSPROJ_PATH> -p:PackageVersion=<YOUR_PACKAGE_VERSION> --output <OUTPUT_DIRECTORY> --configuration <CONFIGURATION>
      dotnet nuget push <PACKAGE_PATH> --source https://pkgs.dev.azure.com/<ORGANIZATION_NAME>/<PROJECT_NAME>/_packaging/<FEED_NAME>/nuget/v3/index.json --api-key <ANY_STRING>
    displayName: "Build, pack and push"          

Notes

Le ApiKey est obligatoire, mais vous pouvez utiliser n’importe quelle valeur arbitraire lors de l’envoi à des flux Azure Artifacts.

YAML n’est pas pris en charge dans TFS.

Publier sur NuGet.org

  1. Générer une clé d’API.

  2. Accédez à votre projet Azure DevOps, puis sélectionnez icône d’engrenageParamètres du projet.

  3. Sélectionnez Connexions de service, puis Nouvelle connexion de service.

  4. Sélectionnez NuGet, puis sélectionnez Suivant.

  5. Sélectionnez ApiKey comme méthode d’authentification. Utilisez l’URL suivante pour votre URL de flux : https://api.nuget.org/v3/index.json.

  6. Entrez l’ApiKey que vous avez générée précédemment, puis entrez un nom de connexion de service.

  7. Sélectionnez Accorder une autorisation d’accès à tous les pipelines, puis Enregistrer lorsque vous avez terminé. Pour sélectionner cette option, vous avez besoin du rôle d’administrateur de connexion de service.

Ajoutez l’extrait de code YAML suivant à votre définition de pipeline :

steps:
- task: NuGetCommand@2
  displayName: 'NuGet push'
  inputs:
    command: push
    nuGetFeedType: external
    publishFeedCredentials: nuget.org