经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » 软件/图像 » Git » 查看文章
Python Gitlab Api 使用方法
来源:jb51  时间:2019/8/29 8:33:25  对本文有异议

简述

公司使用gitlab 来托管代码,日常代码merge request 以及其他管理是交给测试,鉴于操作需经常打开网页,重复且繁琐,所以交给Python 管理。

官方文档

安装

pip install python-gitlab

环境: py3

DEMO

  1. # -*- coding: utf-8 -*-
  2. __Author__ = "xiewm"
  3. __Date__ = '2017/12/26 13:46'
  4.  
  5. """
  6. gitlab 经常使用到的api
  7. DOC_URL: http://python-gitlab.readthedocs.io/en/stable/
  8. LOCAL_PATH: C:\Python36\Lib\site-packages\gitlab
  9. """
  10.  
  11. import gitlab
  12.  
  13. url = 'http://xxxxxxx'
  14. token = 'xxxxxxxxxxxxxx'
  15.  
  16. # 登录
  17. gl = gitlab.Gitlab(url, token)
  18.  
  19. # ---------------------------------------------------------------- #
  20. # 获取第一页project
  21. projects = gl.projects.list()
  22. # 获取所有的project
  23. projects = gl.projects.list(all=True)
  24. # ---------------------------------------------------------------- #
  25.  
  26.  
  27. # ---------------------------------------------------------------- #
  28. # 获取所有project的name,id
  29. for p in gl.projects.list(all=True, as_list=False):
  30. print(p.name, p.id)
  31. # ---------------------------------------------------------------- #
  32.  
  33.  
  34. # ---------------------------------------------------------------- #
  35. # 获取第一页project的name,id
  36. for p in gl.projects.list(page=1):
  37. print(p.name, p.id)
  38. # ---------------------------------------------------------------- #
  39.  
  40.  
  41. # ---------------------------------------------------------------- #
  42. # 通过指定id 获取 project 对象
  43. project = gl.projects.get(501)
  44. # ---------------------------------------------------------------- #
  45.  
  46.  
  47. # ---------------------------------------------------------------- #
  48. # 查找项目
  49. projects = gl.projects.list(search='keyword')
  50. # ---------------------------------------------------------------- #
  51.  
  52. # ---------------------------------------------------------------- #
  53. # 创建一个项目
  54. project = gl.projects.create({'name':'project1'})
  55. # ---------------------------------------------------------------- #
  56.  
  57.  
  58. # ---------------------------------------------------------------- #
  59. # 获取公开的项目
  60. projects = gl.projects.list(visibility='public') # public, internal or private
  61. # ---------------------------------------------------------------- #
  62.  
  63.  
  64. # 获取 project 对象是以下操作的基础
  65.  
  66.  
  67. # ---------------------------------------------------------------- #
  68. # 通过指定project对象获取该项目的所有分支
  69. branches = project.branches.list()
  70. print(branches)
  71. # ---------------------------------------------------------------- #
  72.  
  73.  
  74. # ---------------------------------------------------------------- #
  75. # 获取指定分支的属性
  76. branch = project.branches.get('master')
  77. print(branch)
  78. # ---------------------------------------------------------------- #
  79.  
  80.  
  81. # ---------------------------------------------------------------- #
  82. # 创建分支
  83. branch = project.branches.create({'branch_name': 'feature1',
  84. 'ref': 'master'})
  85. # ---------------------------------------------------------------- #
  86.  
  87.  
  88. # ---------------------------------------------------------------- #
  89. # 删除分支
  90. project.branches.delete('feature1')
  91. # ---------------------------------------------------------------- #
  92.  
  93.  
  94. # ---------------------------------------------------------------- #
  95. # 分支保护/取消保护
  96. branch.protect()
  97. branch.unprotect()
  98. # ---------------------------------------------------------------- #
  99.  
  100.  
  101.  
  102.  
  103.  
  104. # ---------------------------------------------------------------- #
  105. # 获取指定项目的所有tags
  106. tags = project.tags.list()
  107.  
  108. # 获取某个指定tag 的信息
  109. tags = project.tags.list('1.0')
  110.  
  111. # 创建一个tag
  112. tag = project.tags.create({'tag_name':'1.0', 'ref':'master'})
  113.  
  114. # 设置tags 说明:
  115. tag.set_release_description('awesome v1.0 release')
  116.  
  117. # 删除tags
  118. project.tags.delete('1.0')
  119. # or
  120. tag.delete()
  121.  
  122. # ---------------------------------------------------------------- #
  123. # 获取所有commit info
  124. commits = project.commits.list()
  125. for c in commits:
  126. print(c.author_name, c.message, c.title)
  127. # ---------------------------------------------------------------- #
  128.  
  129.  
  130. # ---------------------------------------------------------------- #
  131. # 获取指定commit的info
  132. commit = project.commits.get('e3d5a71b')
  133. # ---------------------------------------------------------------- #
  134.  
  135.  
  136. # ---------------------------------------------------------------- #
  137. # 获取指定项目的所有merge request
  138. mrs = project.mergerequests.list()
  139. print(mrs)
  140. # ---------------------------------------------------------------- #
  141.  
  142.  
  143. # ---------------------------------------------------------------- #
  144. # 获取 指定mr info
  145. mr = project.mergerequests.get(mr_id)
  146. # ---------------------------------------------------------------- #
  147.  
  148.  
  149. # ---------------------------------------------------------------- #
  150. # 创建一个merge request
  151. mr = project.mergerequests.create({'source_branch':'cool_feature',
  152. 'target_branch':'master',
  153. 'title':'merge cool feature', })
  154. # ---------------------------------------------------------------- #
  155.  
  156.  
  157. # ---------------------------------------------------------------- #
  158. # 更新一个merge request 的描述
  159. mr.description = 'New description'
  160. mr.save()
  161. # ---------------------------------------------------------------- #
  162.  
  163.  
  164. # ---------------------------------------------------------------- #
  165. # 开关一个merge request (close or reopen):
  166. mr.state_event = 'close' # or 'reopen'
  167. mr.save()
  168. # ---------------------------------------------------------------- #
  169.  
  170.  
  171. # ---------------------------------------------------------------- #
  172. # Delete a MR:
  173. project.mergerequests.delete(mr_id)
  174. # or
  175. mr.delete()
  176. # ---------------------------------------------------------------- #
  177.  
  178.  
  179. # ---------------------------------------------------------------- #
  180. # Accept a MR:
  181. mr.merge()
  182. # ---------------------------------------------------------------- #
  183.  
  184.  
  185. # ---------------------------------------------------------------- #
  186. # 指定条件过滤 所有的merge request
  187. # state: state of the MR. It can be one of all, merged, opened or closed
  188. # order_by: sort by created_at or updated_at
  189. # sort: sort order (asc or desc)
  190. mrs = project.mergerequests.list(state='merged', sort='asc') # all, merged, opened or closed
  191. # ---------------------------------------------------------------- #
  192.  
  193.  
  194.  
  195. # ---------------------------------------------------------------- #
  196. # 创建一个commit
  197. data = {
  198. 'branch_name': 'master', # v3
  199. 'commit_message': 'blah blah blah',
  200. 'actions': [
  201. {
  202. 'action': 'create',
  203. 'file_path': 'blah',
  204. 'content': 'blah'
  205. }
  206. ]
  207. }
  208. commit = project.commits.create(data)
  209. # ---------------------------------------------------------------- #
  210.  
  211.  
  212.  
  213. # ---------------------------------------------------------------- #
  214. # Compare two branches, tags or commits:
  215. result = project.repository_compare('develop', 'feature-20180104')
  216. print(result)
  217. # get the commits
  218.  
  219. for commit in result['commits']:
  220. print(commit)
  221. #
  222. # get the diffs
  223. for file_diff in result['diffs']:
  224. print(file_diff)
  225. # ---------------------------------------------------------------- #
  226.  
  227.  
  228.  
  229.  
  230.  
  231. # ---------------------------------------------------------------- #
  232. # get the commits
  233. for commit in result['commits']:
  234. print(commit)
  235. #
  236. # get the diffs
  237. for file_diff in result['diffs']:
  238. print(file_diff)
  239. # ---------------------------------------------------------------- #

总结

通过以上的api 可以封装一整套gitlab 的脚本操作或者是命令行操作。

以上这篇Python Gitlab Api 使用方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持w3xue。

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号