使用 Jenkins 构建 GitLab 合并请求

Posted

技术标签:

【中文标题】使用 Jenkins 构建 GitLab 合并请求【英文标题】:Build GitLab merge request with Jenkins 【发布时间】:2016-07-11 13:50:51 【问题描述】:

我知道 GitLab 和 Jenkins 之间都有集成点,但是由于我无法控制的原因,我无法使用任何一个。

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

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

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

【问题讨论】:

【参考方案1】:

截至 2021 年 12 月,这对我有用(Jenkins 2.303.2)

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

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

这对我有用:

1。签出提交

    Pipeline > Repositories > Advanced > Refspec 设置为:
+refs/merge-requests/*/head:refs/remotes/origin/merge-requests/*
    管道>要构建的分支>分支说明符设置为:
origin/merge-requests/$gitlabMergeRequestIid

注意gitlabMergeRequestIid 不是拼写错误,与 gitlabMergeRequestId

不同

2。在流水线脚本中指定分支

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

使用 gitlabSourceBranch 环境变量,该变量在您的 Git 插件脚本中有效(对于分支说明符 ?‍♂️ 对我不起作用)。

branch: '$gitlabSourceBranch'
...

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


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

【讨论】:

【参考方案2】:

在 Jenkins 中,在 Source Code Management 部分中,单击 Advanced,然后将 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 并且它工作正常

【讨论】:

对我不起作用 - ERROR: Couldn't find any revision to build. Verify the repository and branch configuration for this job.【参考方案3】:

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

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

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

然后,在Branch Specifier 字段中,使用这个:

origin/merge-requests/$MR

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

【讨论】:

这很有意义,但是如何从 webhook 中获取 $MR 值? webhook 会发出一个请求正文,但是在 Jenkins 中如何从中获取值? @miguelr 你找到解决这个问题的方法了吗?我现在也有同样的问题 @codereal 我已成功遵循本指南github.com/KostyaSha/github-integration-plugin/blob/master/docs/… @miguelr 这怎么能行?您提供的 KostyaSha 链接是针对 github 的,而不是针对 gitlab 的? @miguelr 你解决了吗?我也有同样的问题

以上是关于使用 Jenkins 构建 GitLab 合并请求的主要内容,如果未能解决你的问题,请参考以下文章

Jenkins+Gitlab自动打TAG

在 Github 中合并拉取请求时触发 Jenkins 构建

Gitlab+Jenkins自动化构建

gitlab jenkins配置WebHook控制代码提交自动构建

jenkins高级用法(jenkins集成gitlab自动构建打包发布)

jenkins 配置gitlab提交代码自动构建