GitLab CE 中的合并请求批准

问题描述 投票:0回答:4

我们希望使用合并请求批准,类似于 Stash 中的工作方式,其中一个人创建 PR,并可以分配多个可以批准或拒绝的审阅者。仅当 N 个审阅者批准后才可以合并 PR(每个存储库可配置)。

这个功能似乎只有 GitLab EE 提供,是吗?从 CE 迁移到 EE 是否有任何免费或廉价的替代方案?

也许是自定义的 GitLab 分支或插件/插件?

git gitlab pull-request
4个回答
3
投票

我们理解,但我们仅将其与 GitLab EE 一起提供,因为我们认为通常锁定工作流程对于大型组织来说更有趣。

在小团队中,彼此更容易就某个工作流程达成一致,因此拥有严格的工具变得不那么重要,而更倾向于拥有灵活的工具。

在您的团队中,您可以考虑使用“拇指”(通过写:+1:)作为批准计数,并在你们之间商定一个最小值。 +1 将在 MR 中求和。

© 乔布·范德沃特

更新 2020 年 9 月 现在 Core 中有合并请求批准 - 在 GitLab 13.2 中引入

但它们是可选的。您不能将其分配给某些用户。


3
投票

即使合并请求批准不是免费 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
    已正确填充。
    您还可以在浏览器窗口中访问此 API URL 进行预览,例如https://gitlab.com/api/v4/projects/blaisekal%2Fmr-approvals/merge_requests/1/approvals
  • | jq -e '.approved_by[0]'
    将输出通过管道传输到
    jq
    ,尝试从列表中获取第一个
    approved_by
    项。
    -e
    确保当找不到该项目时,该命令将返回错误退出状态,这会导致 CI 作业失败,从而导致合并选项被阻止。如果您需要两次批准,请使用
    jq
    过滤器
    '.approved_by[1]'

演示:https://gitlab.com/blaisekal/mr-approvals/-/merge_requests


此解决方法的最大缺点是您需要运行作业来确定批准状态,如果批准数量发生变化,您必须手动重新运行作业,并且团队中的恶意成员可能会在合并之前删除 CI 作业.


2
投票

据我所知,您无法从 CE 迁移到 EE,因为 CE 是免费的,而 EE 不是。

但是你能做的是:

  1. 使用 GitLab.com,您可以免费获得所有 EE 功能;

  2. 我以前从未尝试过 CE,但您可能会在那里找到以下功能:

    • 将用户添加到项目中并赋予他们不同的访问级别。您可以定义允许或不允许合并的级别;
    • 为特定用户分配合并请求,以便仅允许受让人进行合并;
    • 在添加与该问题相关的 MR 之前打开问题,以便人们可以在添加 MR 之前讨论该问题的概要。当您将问题编号添加到已提交的消息时,该问题将在合并时自动关闭。

我不确定这是否是您正在寻找的答案,但我希望它有所帮助。


1
投票

目前这是不可能的。而且我不知道有什么插件可以实现它。

您可以通过“竖起大拇指”反应来投票(并订阅)已经存在的问题和有关该问题的讨论:

https://gitlab.com/gitlab-org/gitlab-ce/issues/42096

© www.soinside.com 2019 - 2024. All rights reserved.