从 GitLab Web 钩子触发 Jenkins 构建合并请求

从 GitLab Web 钩子触发 Jenkins 构建合并请求

我希望 Jenkins (1.561) 构建提交给 GitLab (6.7.5) 的合并(拉取)请求,这些请求由合并请求 Web 钩子触发。我有一个参数化构建,以及 Jenkins 插件“GitLab Merge Request Builder”(1.2.0) 和“GitLab Hook”(1.0.0)。不幸的是,迁移到 Jenkins CI 不是一个真正的选择。

合并请求生成器插件能够构建合并请求,只要变量gitlabMergeRequestIdgitlabTargetBranchgitlabSourceBranch可用。当插件轮询存储库本身或我使用手动有效负载(例如curl --data "gitlabMergeRequestId=3&so_on http://server_name/job/$JOB_NAME/buildWithParameters)触发构建时,此方法很有效,但我无法使用钩子执行此操作。

使用 GitLab Hook 插件,我能够在 JSON 有效负载中获取必要的数据,但值具有“错误”的键:

  • gitlabMergeRequestIdid
  • gitlabTargetBranchtarget_branch
  • gitlabSourceBranchsource_branch

我努力了配置构建参数与 GitLab Merge Request Builder 插件的要求一致Name,变量值为Default Value。不幸的是(也可能是故意的),字段中的变量Default Value不是替换,因此 Jenkins 正在寻找具有 id${id}和类似分支值的合并请求。

我发现没有办法配置从 GitLab 发送的有效负载,并且没有针对 GitLab Hook 插件和 GitLab Merge Request Builder 插件使用的参数名称的配置选项。

我正在考虑编写一个小的 PHP 脚本来拦截并修改 POST 中的有效负载,然后再将其传递给 Jenkins。虽然我确信这会起作用,但它肯定看起来不必要地复杂。

我能看到的唯一其他真正选择是改变插件的来源,但这使得升级它们成为一件非常困难的事情。

我是否忽略了一些显而易见的事情,或者真的没有更简单的方法可以通过从 GitLab 到 Jenkins 的 Web 钩子来触发合并请求构建?

答案1

查看插件 Gitlab Merge Request Builder Plugin。从 Manage Jenkins 配置 Jenkins 并在合并请求生成器中设置 gitlab url。按照说明进行操作https://github.com/timols/jenkins-gitlab-merge-request-builder-plugin1

答案2

检查一下新插件out (gitlab-plugin),也许有帮助。此插件将 Jenkins 模拟为 GitlabCI Web 服务,以便与 GitlabHQ 一起使用。

答案3

您可以使用 Jenkins 的通用 Webhook 触发器。它可以将 Webhook JSON 结构中的任何值贡献给构建。

https://wiki.jenkins.io/display/JENKINS/Generic+Webhook+Trigger+Plugin

相关内容