如何在webhook推送事件中确定分支名称或ID?

时间:2017-02-07 21:30:10

标签: github webhooks

当我在Azure网站上使用GitHub推送事件处理一个简单的webhook事件监听器时,我欣喜若狂,但我现在意识到我没有在json有效负载中看到分支名称或id(例如https://developer.github.com/v3/activity/events/types/#pushevent

我想也许“tree_id”会是它,但它似乎不是。我在GitHubs的文档中找不到任何关于此的信息。也许我需要从事件中获取一个id并进行另一个api调用以获得分支?这样做的原因是我希望能够将GitHub推送事件与我的应用程序组合链接,后者已定义了分支。因此,推送事件是在我的不同应用程序上查看代码更改活动的一种方式 - 因此知道分支是重要的。

2 个答案:

答案 0 :(得分:6)

我写信给GitHub支持,他们告诉我,分支名称是" ref" json有效负载根目录中的元素。从名为jsonBody的JToken对象解析时,C#看起来像这样

var branchName = jsonBody["ref"].ToString().Split('/').Last();

例如在" refs / heads / master"中,分支名称为" master"

答案 1 :(得分:0)

您需要主要关注WEBHOOK响应。这是JSONPATH的窍门(至少是我对jenkins所做的事情):

  1. 首先用字符“ $”阅读您的webhook整个响应。您可以看到它是一些变量,例如:

    $ webhookres ='$'

    echo $ webhookres

  2. 打印出答复后,将其复制并粘贴到此处:https://jsonpath.com/

  3. 现在创建您的图案。例如,如果要分支名称(如果事件是推送的话):
  

$。ref   enter image description here

一旦有了分支名称(将带有/的多余字符串),只需使用 awk cut (Linux命令)修剪不需要的部分。

  1. 您不仅限于此。您只需进行模式操作,就可以利用此方法获取其他值,例如author,git repo url等,然后将其进一步用于自动化。

  2. 即使您使用的是Azure等其他平台,JSONPATH的概念也将相同。因为按照接受的答案“ jsonBody [” ref“]”的建议,它等同于$ .ref ,因为您必须一起识别PATTERN(因为PATTERN在此是 'ref'