使用 Jenkins 构建 GitLab 合并请求

hik*_*aru 4 jenkins gitlab

我知道 GitLab 和 Jenkins 都有彼此的集成点,但是由于我无法控制的原因,我无法使用它们。

很容易将参数传递给作业,告诉它哪个分支,甚至哪个提交要构建。但是,我似乎无法将其调整为正确的配置,它将构建我作为参数传入的合并请求编号。

我需要使用 Jenkins 中开箱即用的“git”功能来做到这一点。(不能使用 GitLab Merge Request 插件,因为它需要对 repo 进行轮询。)此作业必须手动启动,并通过参数指定合并请求编号。我也不会使用 GitLab 的 webhook 来触发它。此要求是特定合并请求的手动和按需构建。

有可能吗,我只是遗漏了一些(不)明显的东西?

hik*_*aru 7

所以没有其他人必须忍受自己解决这个问题......是的......Jenkins可以立即构建一个GitLab合并请求,没有疯狂的插件。

在 Jenkins 的Source Code Management部分中,单击Advanced,并将 设置Refspec为:

+refs/merge-requests/*/head:refs/remotes/origin/merge-requests/*
Run Code Online (Sandbox Code Playgroud)

然后,在Branch Specifier现场,使用这个:

origin/merge-requests/${MR}
Run Code Online (Sandbox Code Playgroud)

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

  • @miguelr 这怎么能行?您提供的 KostyaSha 链接用于 github,而不是 gitlab? (2认同)

Erm*_*ary 6

截至 2022 年 4 月,这对我有用(Jenkins 2.303.2)

\n

其他答案现在似乎已经过时(2016年和2018年)并且对我不起作用(但是为我指明了正确的方向)。

\n

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

\n

这对我有用:

\n

1. 检查提交

\n
    \n
  1. Pipeline > Repositories > Advanced > Refspec设置为:
  2. \n
\n
+refs/merge-requests/*/head:refs/remotes/origin/merge-requests/*\n
Run Code Online (Sandbox Code Playgroud)\n
    \n
  1. Pipeline > Branches to build > Branch Specifier设置为:
  2. \n
\n
+refs/merge-requests/*/head:refs/remotes/origin/merge-requests/*\n
Run Code Online (Sandbox Code Playgroud)\n

注意 gitlabMergeRequest Iid不是拼写错误并且与 gitlabMergeRequest Id不同

\n

2. 在Pipeline脚本中指定分支

\n

通过上述操作,结帐成功,但您仍然需要指定管道脚本将使用哪个分支。

\n

使用gitlabSourceBranch环境变量,它在 Git 插件的脚本中起作用(对于分支说明符 \xe2\x80\x8d\xe2\x99\x82\xef\xb8\x8f 对我来说不起作用)。

\n
origin/merge-requests/${gitlabMergeRequestIid}\n
Run Code Online (Sandbox Code Playgroud)\n
\n

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

\n

在此输入图像描述

\n

在此输入图像描述

\n
\n

PS,如果占位符再次更改或不起作用,请检查https://github.com/jenkinsci/gitlab-plugin#define-variables

\n