使用 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 合并请求的主要内容,如果未能解决你的问题,请参考以下文章
在 Github 中合并拉取请求时触发 Jenkins 构建
gitlab jenkins配置WebHook控制代码提交自动构建