如何解决如何在Web挂钩URL中动态传递git分支名称?
我正在Jenkins中使用参数化的声明性下游作业。 在webhook期间,我需要将git_repo和git_branch作为参数传递。
我已经在Gitlab存储库中定义了此参数
示例
https://myjenkins.com/job/myjob-builder-downstream/buildWithParameters?token=1qqq1f54ff88e373b3c0&git_repo=git@mygitlab:development/myproduct.git&git_branch=master
在挂机期间,我不知道如何将分支名称动态传递给我的下游工作?
预先感谢您的帮助。
解决方法
主要提供程序(bitbucket,github和gitlab)不允许在静态webhook url注册步骤中进行此级别的参数化:
Bitbucket
Github
Gitlab
那么,解决方案是什么?
这些提供商为我们提供了另一种选择:Webhook帖子有效载荷解释。
它如何工作?
当github(example)调用我们的webhook url时,发送带有json的正文http以及有关该事件的很多信息:
- 分支名称
- 存储库名称
- 执行推送事件的用户名
- git commit消息
- 等
因此,在Webhook网址的后端,您必须解析此json并获取所需的值并启动自定义逻辑。这里是这些json主体的一些示例:
不幸的是,对于github,gitlab和bitbucket,json并不相同
Jenkins插件
如果您使用某些jenkins插件,则可以使此json解析无效。由提供商提供。如果是gitlab-plugin。如果您查看源代码,则将查看json解析。
easy-webhook-plugin
如果您与多个提供商合作,或者自定义插件对您没有帮助,则可以尝试使用我的通用插件。
它如何工作?:
插件公开与您的方法类似的公共网址或其他插件的网址:
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发送到该网址,我的插件将对其进行解析并将一些标准参数转发给您的工作:
- repositoryName
- branchName
- authorId
- eventMessage
您可以使用jenkins中的经典“ params”变量来访问这些参数,并做任何您想做的事!
node {
echo 'New build detected with these incoming parameters: '+params
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。