主要提供商(bitbucket、github 和 gitlab)不允许我们在静态 webhook url 注册步骤中进行这种级别的参数化:
比特桶
Github
Gitlab
那么,解决办法是什么?
这些提供程序为我们提供了另一种选择:Webhook 后有效负载解释。
它是如何工作的?
当 github(example) 调用我们的 webhook url 时,发送一个带有 json 的 body http,其中包含有关事件的大量信息:
- 分公司名称
- 存储库名称
- 执行推送事件的用户名
- git 提交消息
- 等
所以在你的 webhook url 的后端,你必须解析这个 json 并获取你想要的值并启动你的自定义逻辑。以下是这些 json 主体的一些示例:
很遗憾,对于 github、gitlab 和 bitbucket,json 是不一样的
Jenkins 插件
如果你使用一些 jenkins 插件,你可以取消这个 json 解析。一个由供应商提供。在你的情况下gitlab-plugin。如果您查看源代码,您将查看 json 解析。
easy-webhook-plugin
如果您使用多个提供商或自定义插件对您没有帮助,您可以尝试我的通用插件。
它是如何工作的?:
插件公开一个类似于您的方法的公共 url 或其他插件的 url:
https://myjenkins.com/project/myjob-builder-downstream/buildWithParameters?token=1qqq1f54ff88e373b3c0&git_repo=git@mygitlab:development/myproduct.git&git_branch=master
但有一些差异,我认为,更干净和容易:
http://my_jenkins.com/easy-webhook-plugin-RDcd4y3LkDcMKKhG/?scmId=gitlab&jobId=hello_word_job
您必须在其中指明 scmId(gitlab 或 bitbucket)和任何 jenkins 作业的 id。
执行git push时,gitlab会将json发送到这个url,我的插件会解析它并将一些标准参数转发给你的工作:
您可以使用 jenkins 中的经典“params”变量访问这些参数,并为所欲为!
node {
echo 'New build detected with these incoming parameters: '+params
}
关注官方readme 或随时通过issue与我联系