首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在MR被批准后运行作业,但如果作业失败则拒绝MR?

如何在MR被批准后运行作业,但如果作业失败则拒绝MR?
EN

Stack Overflow用户
提问于 2020-11-28 02:20:25
回答 1查看 394关注 0票数 0

我希望在MR获得批准后进行一些自动检查,因为对于这些检查,管道必须访问受保护的变量。

如果这些检查失败,则应该拒绝MR。

换句话说,所需的序列应该是这样的:

MR创建了->构建->运行测试-> MR批准(没有恶意暴露受保护的变量) ->合并到受保护的分支-> run checks ->失败时回滚。

这个是可能的吗?

EN

回答 1

Stack Overflow用户

发布于 2021-01-27 06:20:58

您可以通过使用Gitlab API并在管道末尾添加两个新作业来完成此操作。

when关键字是控制在管道中执行哪些作业的众多方法之一。这里有两个可用的when选项很有用。放在管道末尾的第一个任务将是成功条件:

代码语言:javascript
运行
复制
approve_merge_request:
  stage: approve_merge_request
  when: on_success
  script:
    - # this will call the Gitlab Merge Requests API and approve it. More on this below

when的这个参数实际上是默认的,所以您可以不使用此步骤中的when,它仍然可以工作。为了清楚起见,我在这里添加了它。这意味着只有当管道中的其他作业都通过时,该作业才会运行。但是,如果作业失败但具有allow_failure: true属性,它仍然被视为通过,并且此作业将运行(目前无法检测到在when条件下允许某些作业失败)。此外,具有尚未运行的when: manual的作业被视为已通过,即使它稍后可能会失败。when: manual意味着作业必须由用户通过API调用或UI交互来启动。

第二个作业将处理我们的失败情况:

代码语言:javascript
运行
复制
reject_merge_request:
  stage: approve_merge_request
  when: on_failure
  script:
    - # this will call the Gitlab Merge Requests API and reject it. More on this below

when的这个参数意味着,只有在此之前至少有一个作业失败,并且没有allow_failure: true时,此作业才会运行。

合并请求API可用于批准、拒绝、注释和合并合并请求,以及其他选项。完整的文档可以在这里找到:https://docs.gitlab.com/ee/api/merge_requests.html。不幸的是,使用合并请求的" approvals“特性的API仅对付费客户可用,但您仍然可以在没有审批的情况下获得类似的结果。

您可以批准合并请求(请注意,这不会合并它,这是“接受”合并请求。此外,这是一个付费功能,因此仅适用于入门级或青铜级客户以及更高版本),接口操作如下:https://docs.gitlab.com/ee/api/merge_request_approvals.html#approve-merge-request。在您批准合并请求之后,您可能希望接受它,这将把源分支合并到目标分支中。该操作概述如下。

您可以从Gitlab CI提供的预定义变量中获取所有必需的ids。可以从变量$CI_PROJECT_ID中检索项目ID。合并请求IID与合并请求ID不同。ID版本是整个Gitlab实例的唯一ID,IID版本特定于它所在的项目。对于此操作,我们需要IID。您可以使用变量$CI_MERGE_REQUEST_IID来获取它。在尝试使用每个变量之前,您应该检查每个变量是否存在,因为它会在API调用中导致问题。它将存在于与打开的合并请求相关联的所有管道中。

除了注释和关闭之外,Gitlab Merge请求中没有等效的“拒绝”功能,我在下面概述了这一点。

如果您不是付费客户,或者希望接受并合并请求,则需要在此处使用accept merge request操作:https://docs.gitlab.com/ee/api/merge_requests.html#accept-mr。这使用了上述相同的变量。

最后,如果您不是付费用户,但仍然希望“拒绝”合并请求,则可以使用Notes API向合并请求添加注释。向合并请求添加注释的操作如下:https://docs.gitlab.com/ee/api/merge_requests.html#accept-mr

注释之后,如果您想要关闭合并请求,可以通过Update MR操作并将state_event设置为closehttps://docs.gitlab.com/ee/api/merge_requests.html#update-mr来完成

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65042104

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档