我希望在MR获得批准后进行一些自动检查,因为对于这些检查,管道必须访问受保护的变量。
如果这些检查失败,则应该拒绝MR。
换句话说,所需的序列应该是这样的:
MR创建了->构建->运行测试-> MR批准(没有恶意暴露受保护的变量) ->合并到受保护的分支-> run checks ->失败时回滚。
这个是可能的吗?
发布于 2021-01-27 06:20:58
您可以通过使用Gitlab API并在管道末尾添加两个新作业来完成此操作。
when关键字是控制在管道中执行哪些作业的众多方法之一。这里有两个可用的when
选项很有用。放在管道末尾的第一个任务将是成功条件:
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交互来启动。
第二个作业将处理我们的失败情况:
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
设置为close
:https://docs.gitlab.com/ee/api/merge_requests.html#update-mr来完成
https://stackoverflow.com/questions/65042104
复制相似问题