Python3使用 GitLab API 進行批量合并分支
文章前言
每周五上午十二點前需要將項目上各組開發(fā)分支合并軟集倉庫分支, 需要在十個項目上進行 merge
程序員一般都是 很討厭麻煩, 所以編寫此腳本進行 批量 merge, 統(tǒng)一進行合并
另外, 如果項目經(jīng)歷上線或者修復(fù) bug 等情況, 需要合并分支至 uat、release、master 等分支, 也是能夠滿足此腳本使用情況
類似于這種功能性腳本, 一般習慣使用 Python 來編寫, 通過 GitLab 提供的 REST API 進行調(diào)用
GitLab 提供了非常豐富的 REST API 操作, 大家可以搜索官方網(wǎng)址查看
腳本思路
參考了網(wǎng)上大家提供的一部分腳本, 結(jié)合項目本身提供了此思路
- 在 GitLab 中獲取個人令牌 Token
- 獲取需要合并的項目 ID
- 獲取需要合并項目的來源分支以及目標分支
- 驗證 GitLab 對應(yīng)的 Token 是否正確
- 進行合并請求, 失敗會刪除對應(yīng)的合并請求
在網(wǎng)上找到的大部分執(zhí)行不成功, 可能在之前是可以成功的, 但是隨著 GitLab 的 API 3->4 升級, 網(wǎng)上大部分腳本都執(zhí)行失敗了
運行前準備
首先, 電腦上需要 安裝 python3 運行環(huán)境, 將對應(yīng)的 import 包依賴進行下載, 最重要的就是 獲取令牌 Token
登陸進 GitLab 設(shè)置頁面, 點擊訪問令牌
我設(shè)置了中文, 不過差別不大, Token 還是很好認的
依次輸入 Token名稱、Token有效期、以及對應(yīng)的權(quán)限范圍, 將對應(yīng)的 Token 復(fù)制到對應(yīng)的腳本就好了
具體實現(xiàn)代碼
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'] # =========================================配置結(jié)束================================================ # 驗證登錄 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: # 創(chuàng)建 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] 成功, 結(jié)束... \r\n" % target) else: mr.delete() except Exception as e: print(" >>> 合并出錯, 可能有沖突未解決或者 [%s] 分支并沒有更新, 異常信息:: \r\n" % source_branch, str(e)) # 把創(chuàng)建的 merge 請求刪除 mr.delete() if __name__ == "__main__": main()
總結(jié)
到此這篇關(guān)于Python3使用 GitLab API 進行批量合并分支的文章就介紹到這了,更多相關(guān)Python合并分支內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Python Pandas實現(xiàn)數(shù)據(jù)分組求平均值并填充nan的示例
今天小編就為大家分享一篇Python Pandas實現(xiàn)數(shù)據(jù)分組求平均值并填充nan的示例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-07-07Python中字節(jié)數(shù)組和16進制字符串轉(zhuǎn)換方式
這篇文章主要介紹了Python中字節(jié)數(shù)組和16進制字符串轉(zhuǎn)換方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2023-06-06Python學(xué)習筆記之函數(shù)的參數(shù)和返回值的使用
這篇文章主要介紹了Python學(xué)習筆記之函數(shù)的參數(shù)和返回值的使用,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習或者工作具有一定的參考學(xué)習價值,需要的朋友們下面隨著小編來一起學(xué)習學(xué)習吧2019-11-11使用qt quick-ListView仿微信好友列表和聊天列表的示例代碼
本文以微信好友列表為例給大家學(xué)習listview的相關(guān)知識,通過實例demo給大家詳解qt quick-ListView仿微信好友列表和聊天列表的實現(xiàn)方法,需要的朋友參考下吧2021-06-06python第三方庫subprocess執(zhí)行cmd同時輸入密碼獲取參數(shù)
本文給大家介紹python subprocess執(zhí)行cmd同時輸入密碼獲取參數(shù),手動輸入cmd命令,本文給大家逐一介紹這個命令的使用方法,感興趣的朋友跟隨小編一起看看吧2024-01-01Python+OpenCV實現(xiàn)分水嶺分割算法的示例代碼
分水嶺算法是用于分割的經(jīng)典算法,在提取圖像中粘連或重疊的對象時特別有用。本文將用Python+OpenCV實現(xiàn)這一算法,需要的可以參考一下2022-08-08pytorch dataloader 取batch_size時候出現(xiàn)bug的解決方式
今天小編就為大家分享一篇pytorch dataloader 取batch_size時候出現(xiàn)bug的解決方式,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-02-02