Gitlab-PythonApi 合并请求

问题描述

如何使用python API调用在GitLab中检查合并请求状态,我想在合并前检查批准状态,根据批准状态必须做一些检查,一旦检查被批准,就会发生合并

import gitlab
import os
import json
Gitlab_repo = "https://gitlab.devtools.xxxx.com/"
gl = gitlab.Gitlab(Gitlab_repo,private_token='xxxx')
project = gl.projects.get(projectid)
merge_request = project.mergerequests.get(merge_request number)
print(merge_request)

输出

{
   "source_branch":"","id":,"references":{
      "full":"","relative":"","short":""
   },"project_id":,"time_stats":{
      "time_estimate":0,"human_total_time_spent":"None","total_time_spent":0,"human_time_estimate":"None"
   },"description":"","merge_when_pipeline_succeeds":,"work_in_progress":,"changes_count":"","reference":"","first_deployed_to_production_at":"None","source_project_id":,"should_remove_source_branch":"None","milestone":"None","updated_at":"","user_notes_count":0,"latest_build_finished_at":"None","head_pipeline":"None","subscribed":true,"web_url":"","state":"opened","created_at":"","approvals_before_merge":"None","user":{
      "can_merge":true
   },"iid":,"assignee":{
      "avatar_url":"None","username":"","state":"","name":""
   },"author":{
      "avatar_url":"None","state":"active","target_project_id":,"merge_error":"None","task_completion_status":{
      "count":0,"completed_count":0
   },"target_branch":"master","squash":false,"assignees":[
      {
         "avatar_url":"None","name":""
      }
   ],"merged_at":"None","has_conflicts":false,"force_remove_source_branch":true,"merge_status":"can_be_merged","labels":[
      
   ],"pipeline":"None","title":"","merged_by":"None","closed_by":"None","sha":"","closed_at":"None","diff_refs":{
      "start_sha":"","head_sha":"","base_sha":""
   },"squash_commit_sha":"None","latest_build_started_at":"None","downVotes":0,"upVotes":0,"discussion_locked":"None","merge_commit_sha":"None","blocking_discussions_resolved":true
}

解决方法

我不熟悉 python Gitlab API 库,但可以从单独的 API 中检索合并请求批准。它们不在 Merge Requests API 中,而是在 Merge Request Approvals API 中,这是一项付费功能。您必须至少是高级客户才能使用 API。

使用 Merge Request Approvals API,您可以批准 MR、取消批准或获取 MR 的批准状态。要获取状态,请使用以下端点:

GET /projects/:id/merge_requests/:merge_request_iid/approval_state

结果如下:

{
  "approval_rules_overwritten": true,"rules": [
    {
      "id": 1,"name": "Ruby","rule_type": "regular","eligible_approvers": [
        {
          "id": 4,"name": "John Doe","username": "jdoe","state": "active","avatar_url": "https://www.gravatar.com/avatar/0?s=80&d=identicon","web_url": "http://localhost/jdoe"
        }
      ],"approvals_required": 2,"users": [
        {
          "id": 4,"groups": [],"contains_hidden_groups": false,"approved_by": [
        {
          "id": 4,"source_rule": null,"approved": true,"overridden": false
    }
  ]
}

这将包括 MR 批准的适用规则、谁已经批准了 MR(如果可用)以及一个简单的布尔值,指示 MR 是否被批准。

您可以在 the docs 中阅读有关 Merge Request Approvals API 及其其他操作的更多信息。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...