Partager via


Créer un consommateur personnalisé pour les hooks de service

Azure DevOps Services | Azure DevOps Server 2022 | Azure DevOps Server 2019

Avec les hooks de service, vous pouvez informer les systèmes tiers des événements qui se produisent dans votre projet. Vous pouvez utiliser un consommateur personnalisé pour envoyer un message HTTP au point de terminaison défini dans le manifeste de l’extension.

Cet article décrit le développement d’une extension qui implémente un exemple de service consommateur, qui inclut les événements et actions suivants.

  • Événements pris en charge qui déclenchent les actions suivantes :
    • Code envoyé (push)
    • Demande de tirage créée
    • Demande de tirage mise à jour
  • Actions prises en charge lorsque des événements se produisent :
    • Action Do (Envoyer un message HTTP)

Notes

Dans cet article, nous faisons référence au répertoire de base de votre projet en tant que « accueil ».

Exemple de service consommateur

Pour plus d’informations, consultez l’exemple de dépôt GitHub d’extension. Pour obtenir la liste de tous les événements pris en charge que vous pouvez utiliser comme déclencheurs pour votre extension de consommateur personnalisée, consultez Liste des types d’événements.

Conseil

Consultez notre documentation la plus récente sur le développement d’extensions à l’aide du Kit de développement logiciel (SDK) d’extension Azure DevOps.

Fonctionnement des hooks de service

Les éditeurs de hook de service définissent un ensemble d’événements. Les abonnements écoutent et attendent les événements et définissent des actions pour le moment où l’événement est déclenché.

Diagramme des hooks de service

Il s’agit d’une description générale du fonctionnement de toutes nos implémentations de hook de service. Dans notre cas, nous spécifions notre consommateur défini par une extension, ainsi que l’action spécifiée quand un événement se produit.

Créer l’extension

  1. Découvrez comment créer votre extension à partir de zéro.

  2. Ajoutez la contribution spécifique pour l’implémentation consommateur personnalisée à votre fichier manifeste de base. Consultez l’exemple suivant de la façon dont votre manifeste doit ressembler après avoir ajouté la contribution.

{
    "manifestVersion": 1,
    "id": "samples-service-hooks-consumer",
    "version": "0.1.2",
    "name": "Service Hooks Sample",
    "description": "A simple extension that demonstrates how to contribute a consumer service into service hooks.",
    "publisher": "fabrikam",
    "public": false,
    "icons": {
        "default": "images/logo.png"
    },
    "scopes": [],
    "files": [
        {
            "path": "images",
            "addressable": true
        }
    ],
    "content": {
        "details": {
            "path": "readme.md"
        }
    },
    "categories": [
        "Developer samples"
    ],
    "targets": [
        {
            "id": "Microsoft.VisualStudio.Services"
        }
    ],
    "contributions": [
        {
            "id": "consumer",
            "type": "ms.vss-servicehooks.consumer",
            "targets": [
                "ms.vss-servicehooks.consumers"
            ],
            "properties": {
                "id": "consumer",
                "name": "Sample Consumer",
                "description": "Sample consumer service",
                "informationUrl": "https://aka.ms/vsoextensions",
                "inputDescriptors": [
                    {
                        "id": "url",
                        "isRequired": true,
                        "name": "URL",
                        "description": "URL to post event payload to",
                        "inputMode": "textbox"
                    }
                ],
                "actions": [
                    {
                        "id": "performAction",
                        "name": "Perform action",
                        "description": "Posts a standard event payload",
                        "supportedEventTypes": [
                            "git.push",
                            "git.pullrequest.created",
                            "git.pullrequest.updated"
                        ],
                        "publishEvent": {
                            "url": "{{{url}}}",
                            "resourceDetailsToSend": "all",
                            "messagesToSend": "all",
                            "detailedMessagesToSend": "all"
                        }
                    }
                ]
            }
        }
    ]
}

Notes

N’oubliez pas de mettre à jour la publisher propriété.

Pour chaque contribution dans votre extension, le manifeste définit les éléments suivants.

  • Type de contribution : service consommateur (ms.vss-servicehooks.consumer) dans ce cas
  • Cible de contribution : services aux consommateurs (ms.vss-servicehooks.consumers) dans ce cas
  • Propriétés spécifiques à chaque type de contribution

Les consommateurs ont les propriétés suivantes.

Propriété Description
id ID unique de votre service consommateur.
name Nom du consommateur personnalisé, qui est visible lors de la création de l’abonnement de hook de service.
description Décrit votre service grand public.
informationUrl Trouvez plus d’informations sur votre extension.
inputDescriptors Entrées à utiliser par les utilisateurs qui créent des abonnements avec le service consommateur.
actions Décrit les actions à effectuer et les événements qui déclenchent ces actions.

Les actions de votre consommateur ont les propriétés suivantes :

Propriété Description
id ID de votre service d’action.
name Nom de l'action.
description Description détaillée de l’action.
supportedEventTypes Tableau de types de déclencheurs pour lesquels cette action peut être utilisée. Pour plus d’informations, consultez Liste des types d’événements.
publishEvent.url URL à laquelle le message HTTP est envoyé. Il peut être modèle par des valeurs fournies par inputDescriptors. Leurs valeurs réelles sont définies par l’utilisateur lors de la création de l’abonnement.
  1. Déployez votre extension dans votre organisation Azure DevOps et testez-la.

Étapes suivantes