web-dev-qa-db-fra.com

GitHub WebHooks déclenchés globalement au lieu de par branche

Notre produit crée des WebHooks sur GitHub. Un pour chaque projet client.

Chacun de ces projets est lié à une seule branche.

Lorsqu'un Push vers GitHub est effectué, le WebHook correspondant est déclenché, qui à son tour, fait une demande à un point de terminaison de notre côté pour effectuer une certaine action.

Un scénario courant est qu'un client aurait plusieurs projets, connectés à plusieurs branches différentes du même référentiel. Par conséquent, plusieurs WebHooks différents sont connectés au même référentiel.

Le problème est que lorsqu'un Push est exécuté sur l'une des branches, GitHub déclenche tous les WebHooks liés au référentiel.

Nous nous attendons à ce que lorsqu'un Push est effectué vers une certaine branche, un seul WebHook correspondant soit déclenché.

J'ai trouvé deux messages (l'un d'eux date de 2012) qui semblent faire référence à ce problème:

Une solution possible serait d'analyser le paramètre ref envoyé à l'intérieur de la demande de webhook et de contrôler quand agir en conséquence (je n'ai pas encore vérifié cette direction, et j'espère que ref existe en effet toujours et contient le chemin/nom de la branche de droite). Mais ce sera "trop ​​tard" - car tous les WebHooks auront été déclenchés d'ici là ...

Mais il semble déraisonnable que GitHub n'ait aucun moyen de configurer ce comportement d'une manière ou d'une autre.

De l'aide serait appréciée.

13
ilans

J'ai contacté le support GitHub.

J'espère que ce message aiderait les autres, qui comprennent mal la relation entre les WebHooks et les référentiels/branches.

Voici leur réponse:

Le comportement que vous avez observé est attendu et il n'est pas prévu de le changer dans un proche avenir.

Lorsque vous créez un webhook sur un référentiel et que vous vous abonnez à l'événement Push - le webhook se déclenche lorsqu'une branche ou une balise est poussée vers, comme indiqué ici:

https://developer.github.com/v3/activity/events/types/#pushevent

Il n'y a pas de webhooks par branche.

Ainsi, au lieu de créer plusieurs webhooks abonnés à l'événement Push sur le même référentiel, vous devez en créer un seul et vérifier dans quelle branche a été transférée la charge utile que vous recevez (comme vous l'avez remarqué, le nom de la branche est transmis via la référence dans la charge utile).

Cette réponse nous a fait réaliser que notre conception était fausse.

Les branches ne sont pas mappées à des webhooks. Chaque WebHook est lié à un référentiel et lorsqu'une validation dans une branche est effectuée, la branche est indiquée dans l'attribut ref à l'intérieur de la demande Web WebHook, comme ceci:

 {
  "ref": "refs/heads/branch_name",
  ...

Une autre chose à noter est que GitHub limite le nombre de WebHooks à créer par Repository-Event:

Vous pouvez créer jusqu'à 20 webhooks pour chaque événement sur chaque cible d'installation (organisation spécifique ou référentiel spécifique).

Elle a été prise d'ici:

https://developer.github.com/webhooks/

C'est important dans ce contexte, car la création d'un WebHook par branche pour l'événement Push, nous a fait atteindre cette limite de 20 WebHooks, provoquant ainsi des erreurs lors de la tentative de création de WebHooks supplémentaires.

Le conserver dans un WebHook par référentiel éliminerait ce problème.

20
ilans