Partager via


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

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.

  1. Connectez-vous à votre organisation Azure DevOps puis accédez à votre projet.

  2. Sélectionnez Pipelines, puis sélectionnez la définition de votre pipeline.

  3. 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
  1. Connectez-vous à votre organisation Azure DevOps puis accédez à votre projet.

  2. Sélectionnez Pipelines, puis sélectionnez la définition de votre pipeline.

  3. 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.

  1. Connectez-vous à l’organisation Azure DevOps où votre pipeline sera exécuté, puis accédez à votre projet.

  2. Accédez aux Paramètres du projet>Connexions de service.

  3. Sélectionnez Nouvelle connexion de service, sélectionnez NuGet, puis sélectionnez Suivant.

  4. 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.

  5. Lorsque vous avez terminé, sélectionnez Enregistrer.

    Une capture d’écran montrant comment configurer une connexion de service NuGet pour s’authentifier avec un flux externe dans une autre organisation.

  1. Connectez-vous à votre organisation Azure DevOps puis accédez à votre projet.

  2. Sélectionnez Pipelines, puis sélectionnez la définition de votre pipeline.

  3. 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       
    
  1. Connectez-vous à votre organisation Azure DevOps puis accédez à votre projet.

  2. Sélectionnez Pipelines, puis sélectionnez la définition de votre pipeline.

  3. 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          
    

Une capture d’écran montrant le package publié avec succès dans un flux d’une autre organisation.

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)'