首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >通过解析webhook请求正文/JSONpath来参数化我的repo url

通过解析webhook请求正文/JSONpath来参数化我的repo url
EN

Stack Overflow用户
提问于 2020-07-15 13:39:53
回答 1查看 566关注 0票数 0

我正在开发一个多分支管道Jenkins设置和构建,它是使用Git中的webhook触发的。在这里,我选择了Git Branch source as - Git。

当我推送git中的任何更改时,webhook会创建一个包含所有推送事件详细信息的请求体。我如何从这里解析"git_http_url“值(它将包含我的git repo url)。然后我可以在jenkins控制台中使用这个值作为${myrepourl}。基本上我想避免硬编码repo url,它应该使用这个参数动态获取。

请指点一下。

]2]1:https://i.stack.imgur.com/sdb0l.png 2:https://i.stack.imgur.com/icPP9.png

EN

回答 1

Stack Overflow用户

发布于 2020-07-15 16:09:50

一开始,这看起来不是一个很好的主意。我将首先解释原因,概述替代方案,并在最后提出一个解决方案,如果您坚持这样做,该解决方案可能仍然有效。

当你配置你的管道时,你需要为它提供Jenkinsfile。它可以粘贴到配置中("Pipeline script"),或者您可以提供它的路径,以便Jenkins可以执行检出(“来自SCM的Pipeline script”)。在执行前者时,您有一个Jenkinsfile,因此不同的分支无法更改它(因此错过了拥有多分支的要点)。在执行后一种操作时,即使您可以参数化git代码库,您仍然需要提供路径(因为它不会到达github通知)。此外,我可以使用我的repo触发您的构建,但您的管道无论如何都不能正确地构建我的repo。因此,您的管道只能构建您的repo,在这一点上,您为什么坚持不为您的特定管道提供它特别知道如何构建的特定repo的路径,这一点有点不清楚。

大多数需要在Github上使用多分支管道的人都会使用专门为此目的编写的插件,例如Github多分支插件或Github组织。这些插件自己做所有的工作:它们注册通知,处理它们,并开始构建。他们还会为你更新Github中的构建状态。

最后,如果你坚持自己处理Github通知,你可以使用通用的Webhook触发器插件,它允许你通过POST-ing使用令牌触发作业到指定的URL。这可能看起来像这样:

代码语言:javascript
复制
pipeline {
    agent { node { label 'master'} }
    triggers {
        GenericTrigger(causeString: 'Generic Cause', 
            genericVariables: [
                [key: 'DATA', value: '$'], //JSONPath expression meaning "everything"
                [key: 'GITHUB_URL', value: '$.project.git_http_url']
            ], 
            printContributedVariables: false, // change to 'true' to see all the available variables in the console
            printPostContent: false, // change to 'true' to see the dump of the POST data
            silentResponse: false,
            token: 'my_token')
    }

按照第一个配置行,任何张贴的JSON都将被扁平化并转换为管道变量,并带有您定义的前缀(在本例中为"DATA_")。例如,Github有效负载中字段project中的字段git_http_url将在管道中定义,并作为DATA_project_git_http_url提供给您。根据第二个配置行,它还将以GITHUB_URL的形式提供。

你可以用例如测试你的管道。

代码语言:javascript
复制
curl -XPOST -H "Content-Type: application/json" 'http://<jenkins>/generic-webhook-trigger/invoke?token=my_token' --data '{"hello": "world"}'

在本例中,提供的变量将为DATA_hello,并且它的值为world。(自然不会定义GITHUB_URL变量。)

如果你想把它变成真正的Github webhook处理器,你需要确保Github通知文件到达<jenkins>/generic-webhook-trigger/invoke?token=my_token。我们使用nginx来实现这一点,但还有很多其他选择。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62908257

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档