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

How do I determine branch name or id in webhook push event?

当我在我的 Azure 站点上得到一个简单的 webhook 事件侦听器处理 GitHub 推送事件时,我欣喜若狂,但我现在意识到我在 json 有效负载(此处示例 https://developer.github.com/v3/activity/events/types/#pushevent

我想也许 "tree_id" 会是,但似乎不是。我在 GitHubs 的文档中找不到任何关于此的信息。也许我需要从事件中获取其中一个 ID,然后再调用 api 来获取分支?这样做的原因是我希望能够 link GitHub 使用我的已定义分支的应用程序组合推送事件。因此,推送事件是一种在我的不同应用程序上查看代码更改 activity 的方式——因此了解分支很重要。

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

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

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

主要看WEBHOOK响应。这是 JSONPATH 的技巧(至少是我在 jenkins 工作中所做的):

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

    $webhookres='$'

    echo $webhookres

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

  3. 现在创建你的模式。例如,如果您想要 branch 名称(如果事件是推送):

$.ref

一旦你有了分支名称(它会有额外的带 / 的字符串),只需使用 awkcut[trim 不需要的部分(linux 命令)。

  1. 您不仅限于此。所有你需要在模式上工作的东西,你都可以利用这种方法来获取其他值,比如作者、git repo url 等,然后这些可以进一步用于你的自动化。

  2. 即使您使用任何其他平台(如 Azure),JSONPATH 概念也是相同的。因为正如接受的答案中所建议的那样,"jsonBody["ref"]",它相当于 $.ref,因为你必须识别 PATTERN(因为这里的 PATTERN 是 'ref')