如何确定 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 工作中所做的):
首先阅读带有字符“$”的 webhook 整个响应。您可以捕捉到它是一些变量,例如:
$webhookres='$'
echo $webhookres
打印回复后,将其复制并粘贴到此处:https://jsonpath.com/
- 现在创建你的模式。例如,如果您想要 branch 名称(如果事件是推送):
$.ref
一旦你有了分支名称(它会有额外的带 / 的字符串),只需使用 awk 或 cut[trim 不需要的部分(linux 命令)。
您不仅限于此。所有你需要在模式上工作的东西,你都可以利用这种方法来获取其他值,比如作者、git repo url 等,然后这些可以进一步用于你的自动化。
即使您使用任何其他平台(如 Azure),JSONPATH 概念也是相同的。因为正如接受的答案中所建议的那样,"jsonBody["ref"]",它相当于 $.ref,因为你必须识别 PATTERN(因为这里的 PATTERN 是 'ref')
当我在我的 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 工作中所做的):
首先阅读带有字符“$”的 webhook 整个响应。您可以捕捉到它是一些变量,例如:
$webhookres='$'
echo $webhookres
打印回复后,将其复制并粘贴到此处:https://jsonpath.com/
- 现在创建你的模式。例如,如果您想要 branch 名称(如果事件是推送):
$.ref
一旦你有了分支名称(它会有额外的带 / 的字符串),只需使用 awk 或 cut[trim 不需要的部分(linux 命令)。
您不仅限于此。所有你需要在模式上工作的东西,你都可以利用这种方法来获取其他值,比如作者、git repo url 等,然后这些可以进一步用于你的自动化。
即使您使用任何其他平台(如 Azure),JSONPATH 概念也是相同的。因为正如接受的答案中所建议的那样,"jsonBody["ref"]",它相当于 $.ref,因为你必须识别 PATTERN(因为这里的 PATTERN 是 'ref')