【问题标题】:How can we programmatically approve merge requests in GitLab?我们如何以编程方式批准 GitLab 中的合并请求?
【发布时间】:2020-01-20 23:53:13
【问题描述】:

我们小组有一个机器人,可以为我们的代码库的某些机械更改创建合并请求。如果/当 CI 管道成功时,我们希望这些 MR 自动合并,但我们的项目需要我们小组成员的批准。这意味着现在人类必须为每个机器人创建的 MR 手动单击“批准”和“合并”。显然 GitLab 没有办法为某些用户设置不同的批准规则,所以我还没有找到一种方法让机器人的用户不受这个要求的影响。

我目前的想法是有一个单独的流程来批准机器人创建的每个合并请求。有没有一种简单的方法可以以编程方式做到这一点?也就是说,是否有一个 API(或者更好的是命令行工具),当给定合并请求的分支名称时,它会批准与该分支关联的合并请求?

我也愿意通过其他方式以最少的人为干预来实现这些更改。不过,我确实希望他们通过 CI 管道(目前通过让他们使用 MR 来完成),并且 MR 在管道失败的极少数情况下也有帮助,因此我们可以调试出了什么问题。

以防万一:我们正在使用 gitlab.com,并且有一个“白银”计划。

【问题讨论】:

  • 你检查过 Gitlab 合并请求 API 和/或 Gitlab python client 吗?
  • @NicolasPepinster 我看了看,但找不到以编程方式批准 MR 的方法,只能合并已批准的方法。不过,我对 GitLab 的 API 不太熟悉,所以我不确定我是不是找错地方了,还是根本没有办法做到这一点。

标签: gitlab


【解决方案1】:

警告,关于previous answer:GitLab 14 将带来:

Removal of merge request approvers endpoint in favor of Approval Rules API

由于批准规则的发布,PUT /projects/:id/merge_requests/:merge_request_iid/approvers API 端点已被弃用,并计划于 2019 年 9 月 22 日移除。

合并请求的批准规则允许您通过指定合格的批准者以及每个批准者的最小批准数来沟通谁应该参与代码审查。

GitLab 13.11 移除了对此端点的支持。
如果您当前使用此端点,请阅读文档以了解如何使用 Approval Rules API 实现该功能。

【讨论】:

    【解决方案2】:

    您可以通过 GitLab API 执行此操作。这将是一个至少两步的过程。

    首先,通过Merge Request Approvals endpoint 批准合并请求。向https://gitlab.example.com/api/v4/projects/:id/merge_requests/:merge_request_iid/approve 发送POST 请求。

    • :id是项目ID
    • :merge_request_iid 是合并请求本身的 ID/编号。

    接下来,您可以通过Accept MR API endpoint 接受(合并)合并请求。 向https://gitlab.example.com/api/v4/projects/:id/merge_requests/:merge_request_iid/merge 发送PUT 请求,其中:id:merge_request_iid 占位符与前一个端点相同。

    关于“接受 MR”请求的一个注意事项是,如果您想在合并前等待管道成功,您需要将属性 merge_when_pipeline_succeeds 设置为 true。否则,将立即合并。

    可以为每个请求发送各种其他可选属性。文档链接概述了这些属性及其用途。

    【讨论】:

      猜你喜欢
      • 2019-03-13
      • 2016-12-22
      • 2022-11-04
      • 2021-12-19
      • 2012-02-08
      • 2019-06-05
      • 2021-06-04
      • 2018-07-05
      • 1970-01-01
      相关资源
      最近更新 更多