1. 程式人生 > 程式設計 >Python3使用 GitLab API 進行批量合併分支

Python3使用 GitLab API 進行批量合併分支

在這裡插入圖片描述

文章前言

每週五上午十二點前需要將專案上各組開發分支合併軟集倉庫分支,需要在十個專案上進行 merge

程式設計師一般都是 很討厭麻煩,所以編寫此指令碼進行 批量 merge,統一進行合併

另外,如果專案經歷上線或者修復 bug 等情況,需要合併分支至 uat、release、master 等分支,也是能夠滿足此指令碼使用情況

類似於這種功能性指令碼,一般習慣使用 Python 來編寫,通過 GitLab 提供的 REST API 進行呼叫

GitLab 提供了非常豐富的 REST API 操作,大家可以搜尋官方網址檢視

指令碼思路

參考了網上大家提供的一部分指令碼,結合專案本身提供了此思路

  • 在 GitLab 中獲取個人令牌 Token
  • 獲取需要合併的專案 ID
  • 獲取需要合併專案的來源分支以及目標分支
  • 驗證 GitLab 對應的 Token 是否正確
  • 進行合併請求,失敗會刪除對應的合併請求

在網上找到的大部分執行不成功,可能在之前是可以成功的,但是隨著 GitLab 的 API 3->4 升級,網上大部分指令碼都執行失敗了

執行前準備

首先,電腦上需要 安裝 python3 執行環境,將對應的 import 包依賴進行下載,最重要的就是 獲取令牌 Token

登陸進 GitLab 設定頁面,點選訪問令牌

我設定了中文,不過差別不大,Token 還是很好認的

Python3使用 GitLab API 進行批量合併分支

依次輸入 Token名稱、Token有效期、以及對應的許可權範圍,將對應的 Token 複製到對應的指令碼就好了

Python3使用 GitLab API 進行批量合併分支

具體實現程式碼

import urllib.request
import gitlab

# ========================================配置開始=================================================

# ⚠️ 專案名,無實際意義
project_name = "xxxx"
# ⚠️ 代表多個專案 ID,平常一個專案即可,多個專案需要保證 source_branch、target_branches 保持一致
project_id_list = ['xxxx']
# ⚠️ 生成 gitlab 物件
gitlab_url = 'xxxx'
# ⚠️ 需要生成自己的令牌 token
token = 'xxxx'
# ⚠️ 將 source_branch 分支 merge target_branches 分支集上
source_branch = 'test'
target_branches = ['master']

# =========================================配置結束================================================


# 驗證登入
gl = gitlab.Gitlab(gitlab_url,token)


def main():
 for project_id in project_id_list:
  project = gl.projects.get(project_id)
  print(' >>> 專案ID :: [%s],專案名稱 :: [%s] ' % (str(project.id),project_name))
  for target in target_branches:
   print(" >>> 正在合併專案 :: [%s] 的 [%s] 分支到 [%s] 分支" % (project_name,source_branch,target))
   # mr合併請求的物件
   mr = None
   try:
    # 建立 merge request
    mr = project.mergerequests.create({'source_branch': source_branch,'target_branch': target,'title': "Merge branch '%s' into '%s'" % (
              source_branch,target)
             })

    # 接受合併請求
    url = '%s/api/v4/projects/%s/merge_requests/%s/merge' % (gitlab_url,project.id,mr.iid)
    print(' >>> Merge url :: [%s],title :: [%s] ' % (url,mr.title))

    # 個人/專案訪問令牌,新增至請求頭
    headers = {"PRIVATE-TOKEN": token}
    req = urllib.request.Request(url=url,headers=headers,method="PUT")
    resp = urllib.request.urlopen(req)
    if resp.code == 200:
     print(" >>> 合併到目標分支 [%s] 成功,結束... \r\n" % target)
    else:
     mr.delete()
   except Exception as e:
    print(" >>> 合併出錯,可能有衝突未解決或者 [%s] 分支並沒有更新,異常資訊:: \r\n" % source_branch,str(e))
    # 把建立的 merge 請求刪除
    mr.delete()

if __name__ == "__main__":
 main()

總結

到此這篇關於Python3使用 GitLab API 進行批量合併分支的文章就介紹到這了,更多相關Python合併分支內容請搜尋我們以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援我們!