【问题标题】:How to pass git branch name dynamically in web hook URL?如何在 Web 挂钩 URL 中动态传递 git 分支名称?
【发布时间】:2020-12-10 01:07:30
【问题描述】:

我在 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

在 webhook 期间,我不知道如何将分支名称动态传递给我的下游作业?

提前感谢您的帮助。

【问题讨论】:

    标签: jenkins continuous-integration gitlab jenkins-pipeline jenkins-declarative-pipeline


    【解决方案1】:

    主要提供商(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与我联系

    【讨论】:

      【解决方案2】:

      Jenkins gitlab 插件有预定义变量:

      https://plugins.jenkins.io/gitlab-plugin/

      参见定义的变量部分。但是为了使用它们,您需要启用 This project is parametrized 部分而不添加任何变量,这会触发 webhook 自动填充变量,如 gitlabSourceBranchgitlabTargetBranch 以及未来版本中的更多内容.. 不确定这是否是一个错误,但如果没有启用一次,变量就不会被填充。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-11-11
        • 1970-01-01
        • 1970-01-01
        • 2014-10-24
        • 2018-05-04
        • 1970-01-01
        相关资源
        最近更新 更多