使用Jenkins构建GitLab合并请求

8
我知道GitLab和Jenkins都有彼此的集成点,但由于我无法控制的原因,我不能使用它们。
将参数传递给作业,告诉它要构建哪个分支,甚至是哪个提交,这很容易。然而,我似乎无法将其调整到正确的配置,以便它可以作为参数构建合并请求号码。
我需要在Jenkins的开箱即用的“git”功能中完成此操作。(无法使用GitLab Merge Request插件,因为它需要轮询存储库。)必须手动启动此作业,并通过参数指定合并请求号码。我也不会通过来自GitLab的Webhook触发它。这个需求是特定合并请求的手动和按需构建。
可能吗,我只是漏掉了一些(不)明显的东西?
3个回答

8

为了让其他人不必自己费力地弄清楚……是的……Jenkins可以开箱即用地构建GitLab合并请求,无需使用疯狂的插件。

在Jenkins中,在“源代码管理”部分,单击“高级”,并将“Refspec”设置为:

+refs/merge-requests/*/head:refs/remotes/origin/merge-requests/*

然后,在“分支指定器(Branch Specifier)”字段中,请使用以下内容:
origin/merge-requests/${MR}

其中${MR}是传递给构建的参数,表示要获取的合并请求的编号。


1
这很有道理,但是如何从Webhook获取${MR}值呢?Webhook将发布一个请求正文,但是在Jenkins中如何从中获取值呢? - miguelr
@miguelr,你找到解决这个问题的方法了吗?我现在也遇到了同样的问题。 - codereal
@codereal 我已经成功地按照这个指南 https://github.com/KostyaSha/github-integration-plugin/blob/master/docs/Configuration.adoc 进行了操作。 - miguelr
3
@miguelr,这怎么行呢?你提供的KostyaSha链接是给Github的,不是Gitlab? - axd
@miguelr,你解决了这个问题吗?我也遇到了同样的问题。 - kiran

6

这是我在2022年4月的实践结果 (Jenkins 2.303.2)

其他答案似乎已经过时了 (2016年和2018年) 并且对我无效 (但是指引了我方向)。

使用gitlabMergeRequestId给我提供了一个奇怪的巨大ID,而这个合并请求在我的存储库中甚至不存在 (我不知道它来自哪里)。而MR似乎是2016年的旧占位符。

以下是适用于我的内容:

1. 检出提交记录

  1. 管道 > 存储库 > 高级设置 > Refspec 设置为:
+refs/merge-requests/*/head:refs/remotes/origin/merge-requests/*
  1. 管道 > 构建分支 > 分支说明符设置为:
origin/merge-requests/${gitlabMergeRequestIid}

N.B. gitlabMergeRequestIid不是拼写错误,与gitlabMergeRequestId不同

2. 在Pipeline脚本中指定分支

在上述过程中,检出成功后,您仍需要指定您的流水线脚本将使用哪个分支。

使用gitlabSourceBranch环境变量,在Git插件的脚本中可正常工作(对于分支指定器而言,这对我完全没用 ‍♂️)。

branch: '${gitlabSourceBranch}'
...

最终结果(不包括脚本):

这里输入图片描述

这里输入图片描述


附注:如果占位符再次更改或此方法无效,请参考https://github.com/jenkinsci/gitlab-plugin#defined-variables


1
在Jenkins中,在源代码管理部分,单击高级选项,并将Refspec设置为:
+refs/merge-requests/*/head:refs/remotes/origin/merge-requests/*

然后,在"分支规范"字段中使用以下内容:

这里是您可以使用的变量https://github.com/jenkinsci/gitlab-plugin#defined-variables,但是在这种情况下,您应该使用:

origin/merge-requests/${gitlabMergeRequestId}

其中${gitlabMergeRequestId}是传递给构建的参数,表示要获取的合并请求的编号。

我已经实现了GitLab Webhook,并且它正常工作。


对我不起作用 - 错误:找不到要构建的任何修订版。请验证此作业的存储库和分支配置。 - Ermiya Eskandary

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接