我们希望使用合并请求批准,类似于 Stash 中的工作方式,其中一个人创建 PR,并可以分配多个可以批准或拒绝的审阅者。仅当 N 个审阅者批准后才可以合并 PR(每个存储库可配置)。
这个功能似乎只有 GitLab EE 提供,是吗?从 CE 迁移到 EE 是否有任何免费或廉价的替代方案?
也许是自定义的 GitLab 分支或插件/插件?
我们理解,但我们仅将其与 GitLab EE 一起提供,因为我们认为通常锁定工作流程对于大型组织来说更有趣。
在小团队中,彼此更容易就某个工作流程达成一致,因此拥有严格的工具变得不那么重要,而更倾向于拥有灵活的工具。
在您的团队中,您可以考虑使用“拇指”(通过写:+1:)作为批准计数,并在你们之间商定一个最小值。 +1 将在 MR 中求和。
© 乔布·范德沃特
更新 2020 年 9 月 现在 Core 中有合并请求批准 - 在 GitLab 13.2 中引入
但它们是可选的。您不能将其分配给某些用户。
即使合并请求批准不是免费 GitLab 层的一部分,该功能在合并请求用户界面上仍然可用,并且数据在 API 中可用,因此作为解决方法,您可以创建一个实现检查的 GitLab CI 作业批准数量,如果不足则失败。
首先,确保在项目的合并请求设置中启用
Pipelines must succeed
。
然后在
.gitlab-ci.yml
中创建一个新作业,当合并请求批准不足时,该作业将会失败:
code_approved:
rules:
- if: $CI_MERGE_REQUEST_ID
script:
- apt-get update
- apt-get install -y jq curl
- >
curl --header "JOB-TOKEN: $CI_JOB_TOKEN"
"$CI_API_V4_URL/projects/$CI_PROJECT_ID/merge_requests/$CI_MERGE_REQUEST_IID/approvals"
| jq -e '.approved_by[0]'
apt-get ...
:安装 curl
和 jq
二进制文件。curl --header "JOB-TOKEN: $CI_JOB_TOKEN"
:验证呼叫。"$CI_API_V4_URL/projects/$CI_PROJECT_ID/merge_requests/$CI_MERGE_REQUEST_IID/approvals"
GitLab API 端点返回当前合并请求的批准数据。请注意,在 GitLab Free 上,此资源返回的许多数据丢失或具有误导性,但 approved_by
已正确填充。| jq -e '.approved_by[0]'
将输出通过管道传输到 jq
,尝试从列表中获取第一个 approved_by
项。 -e
确保当找不到该项目时,该命令将返回错误退出状态,这会导致 CI 作业失败,从而导致合并选项被阻止。如果您需要两次批准,请使用 jq
过滤器 '.approved_by[1]'
。演示:https://gitlab.com/blaisekal/mr-approvals/-/merge_requests
此解决方法的最大缺点是您需要运行作业来确定批准状态,如果批准数量发生变化,您必须手动重新运行作业,并且团队中的恶意成员可能会在合并之前删除 CI 作业.
据我所知,您无法从 CE 迁移到 EE,因为 CE 是免费的,而 EE 不是。
但是你能做的是:
使用 GitLab.com,您可以免费获得所有 EE 功能;
我以前从未尝试过 CE,但您可能会在那里找到以下功能:
我不确定这是否是您正在寻找的答案,但我希望它有所帮助。
目前这是不可能的。而且我不知道有什么插件可以实现它。
您可以通过“竖起大拇指”反应来投票(并订阅)已经存在的问题和有关该问题的讨论: