python-gitlab

2023-11-04

二、获取gitlab token

1、进入账户设置界面

2、选择access tokens,填写信息生成token

三、使用

1、登录gitlab

import gitlab
 
#url: gitlab地址;token: 刚才生成的token
gl = gitlab.Gitlab(url, token)
2、Project
2.1 创建用户|项目|组

#直接创建项目
project = gl.projects.create({'name':'project1'})
 
# 创建用户
"""
常用参数:以下参数都可以使用user对象进行修改
email (必填)-电子邮件
username (必填)-用户名
name (必填)-名称
password (可选)-密码
can_create_group (可选)-用户可以创建组-正确或错误
skip_confirmation (可选)-跳过确认-正确或错误(默认)
external (可选)-将用户标记为外部用户-true或false(默认)
"""
user = gl.users.create({'email': 'qinsh@qq.com',
                        'password': 'qinsh123456',
                        'username': 'qinsh',
                        'name': '秦始皇'})


# 根据用户ID获取用户对象
# user = gl.users.get(1)
# 根据用户Git账号获取用户对象
# user = gl.users.list(username="qinsh")[0]
 
# 根据用户对象可以进行如下操作
username = user.username  # 获取用户Git账号
name = user.name  # 获取用户姓名
user_id = user.id  # 获取用户ID
 
# 修改用户属性
user.external = True  # 将用户标记为外部用户
user.save()
 
# 删除用户
gl.users.delete(user_id)  # 根据用户ID进行删除
user.delete()  # 根据用户对象直接进行删除

#为特定用户创建项目
alice = gl.users.list(username='alice')[0]
user_project = alice.projects.create({'name': 'project'})
 

# 创建组
group = gl.groups.create({'name': 'group1', 'path': 'group1'})
 
# 修改组信息
group.description = 'My awesome group'
group.save()


# 删除组
gl.groups.delete(1)  # 通过组ID进行删除
group.delete()  # 通过组对象直接删除
 
# 获取当前组的成员
members = group.members.list()
# members = group.members.all(all=True)
# 通过组成员ID获取组员member_id
# members = group.members.get(1)
 
# 添加一个成员到指定组
"""
GIT权限:
gitlab.GUEST_ACCESS = 10
gitlab.REPORTER_ACCESS = 20
gitlab.DEVELOPER_ACCESS = 30
gitlab.MAINTAINER_ACCESS = 40
gitlab.OWNER_ACCESS = 50
"""
member = group.members.create({'user_id': user_id,
                               'access_level': gitlab.GUEST_ACCESS})
# 修改组的权限
member.access_level = gitlab.DEVELOPER_ACCESS
member.save()
# or
member.access_level = 10
member.save()
 
# 将成员从某组移除
group.members.delete(1)  # 通过组成员ID进行移除member_id
member.delete()  # 通过组成员对象直接进行移除
                      
#为特定组创建项目
group_id = gl.groups.list(search='my-group')[0].id
project = gl.projects.create({'name': 'myrepo', 'namespace_id': group_id}) 
2.2 查找和搜索project

#获取项目。默认获取第一页的项目,每页20个
projects = gl.projects.list()
 
#获取指定页的项目
projects = gl.projects.list(page=2)
 
#获取所有项目
projects = gl.projects.list(all=True)
 
#根据项目名称搜索项目
projects = gl.projects.list(search='project_name')
 
#通过指定id 获取 project 对象
project = gl.projects.get(project_id)
 
#获取archived项目
projects = gl.projects.list(archived=1)
 
#根据项目visibility获取项目,public,internal,private
projects = gl.projects.list(visibility='public')
 
#获取当前用户(token的账户)拥有的项目
projects = gl.projects.list(owned=True)
 
#获取当前用户(token的账户)启动的项目
projects = gl.projects.list(starred=True)
 
#搜索结果排序
#在不指定的排序标准的情况下默认按照created_at,desc降序排列
#order_by参数:id, name, path, created_at, updated_at, last_activity_at. 
#sort参数:asc,desc.
#查找所有项目,并按照项目id升序排列
projects = gl.projects.list(all=True,order_by='id',sort=‘asc’)
2.3 project基本属性

p=gl.projects.get(460)
print(p)
#输出结果如下:
#可以直接通过p.id,p.name,p.namespace['id']的方式获取单个信息
{
  'id': 460,
  'description': '协议转换转发公共',
  'name': 'xy-transform-forward-common',
  'name_with_namespace': 'xy / xy-transform-forward-common',
  'path': 'xy-transform-forward-common',
  'path_with_namespace': 'xy/xy-transform-forward-common',
  'created_at': '2021-06-11T02:16:33.851Z',
  'default_branch': 'master',
  'tag_list': [],
  'ssh_url_to_repo': 'git@gitlab.xy.in:xy/xy-transform-forward-common.git',
  'http_url_to_repo': 'http://gitlab.xy.in/xy/xy-transform-forward-common.git',
  'web_url': 'http://gitlab.xy.in/xy/xy-transform-forward-common',
  'avatar_url': None,
  'star_count': 0,
  'forks_count': 1,
  'last_activity_at': '2021-07-02T08:47:37.645Z',
  '_links': {
    'self': 'http://gitlab.xy.in/api/v4/projects/460',
    'issues': 'http://gitlab.xy.in/api/v4/projects/460/issues',
    'merge_requests': 'http://gitlab.xy.in/api/v4/projects/460/merge_requests',
    'repo_branches': 'http://gitlab.xy.in/api/v4/projects/460/repository/branches',
    'labels': 'http://gitlab.xy.in/api/v4/projects/460/labels',
    'events': 'http://gitlab.xy.in/api/v4/projects/460/events',
    'members': 'http://gitlab.xy.in/api/v4/projects/460/members'
  },
  'archived': False,
  'visibility': 'private',
  'resolve_outdated_diff_discussions': False,
  'container_registry_enabled': True,
  'issues_enabled': True,
  'merge_requests_enabled': True,
  'wiki_enabled': True,
  'jobs_enabled': True,
  'snippets_enabled': True,
  'shared_runners_enabled': True,
  'lfs_enabled': True,
  'creator_id': 1,
  'namespace': {
    'id': 2,
    'name': 'xy',
    'path': 'xy',
    'kind': 'group',
    'full_path': 'xy',
    'parent_id': None
  },
  'import_status': 'none',
  'import_error': None,
  'open_issues_count': 0,
  'runners_token': 'dWTY9wbm_xMziGKNHLiy',
  'public_jobs': True,
  'ci_config_path': None,
  'shared_with_groups': [],
  'only_allow_merge_if_pipeline_succeeds': False,
  'request_access_enabled': False,
  'only_allow_merge_if_all_discussions_are_resolved': False,
  'printing_merge_request_link_enabled': True,
  'merge_method': 'merge',
  'permissions': {
    'project_access': None,
    'group_access': None
  }
}
2.4 修改和删除project
#修改基本属性
project.snippets_enabled = 1
project.save()
 
#项目头像可以作为数据(文件的内容)或文件来传递
#以二进制模式打开的对象
project.avatar = open('path/to/file.png', 'rb')
project.save()
 
#删除
gl.projects.delete(project_id)
project.delete()
2.5 project基本操作
2.5.1 分支管理
#通过指定project对象获取该项目的所有分支
branches = project.branches.list()
 
# 获取指定分支的属性
branch = project.branches.get('master')
 
# 创建分支
#ref: 从哪创建分支
branch = project.branches.create({'branch_name': 'feature1','ref': 'master'})
 
# 删除分支
project.branches.delete('feature1')
 
# 分支保护/取消保护
branch.protect()
branch.unprotect()
2.5.2 标签管理

# 获取指定项目的所有tags
tags = project.tags.list(all=True)
 
# 获取某个指定tag 的信息
tags = project.tags.list('1.0')
 
# 创建一个tag
tag = project.tags.create({'tag_name':'1.0', 'ref':'master'})
 
# 设置tags 说明:
tag.set_release_description('awesome v1.0 release')
 
# 删除tags
project.tags.delete('1.0')
# or
tag.delete()
2.5.3 提交管理
#获取所有commit
commits = project.commits.list()
 
# 获取指定commit的info
commit = project.commits.get('e3d5a71b')
 
# 创建一个commit
data = {
  'branch_name': 'master', # v3
  'commit_message': 'blah blah blah',
  'actions': [
    {
      'action': 'create',
      'file_path': 'blah',
      'content': 'blah'
    }
  ]
}
commit = project.commits.create(data)
2.5.4 合并管理
# 获取指定项目的所有merge request
mrs = project.mergerequests.list()
 
# 指定条件过滤 所有的merge request
# state: mr状态,可选参数merged, opened or closed
# order_by参数:created_at, updated_at
# sort参数: asc, desc
mrs = project.mergerequests.list(state='merged', sort='asc')
 
# 获取指定mr info
mr = project.mergerequests.get(mr_id)
 
#获取合并的全部提交列表
commits = mr.commits()
 
#获取合并的全部修改列表
changes = mr.changes()
 
#获取合并时将关闭的问题列表
mr.closes_issues()
 
# 创建一个merge request
mr = project.mergerequests.create({'source_branch':'cool_feature',
                  'target_branch':'master',
                  'title':'merge cool feature', })
                  
# 更新一个merge request 的描述
mr.description = 'New description'
mr.save()
 
# 开关一个merge request (close or reopen):
mr.state_event = 'close' # or 'reopen'
mr.save()
 
# 删除:
project.mergerequests.delete(mr_id)
# or
mr.delete()
 
# 接受:
mr.merge()

2.5.5 钩子管理
#获取指定项目的现有hooks:
hooks = project.hooks.list()
 
#获取指定的hook详情:
hook = project.hooks.get(hook_id)
 
#创建hook
hook = project.hooks.create({'url': 'http://my/action/url', 'push_events': 1})
 
#更新hook
hook.push_events = 0
hook.save()
 
#删除hook
project.hooks.delete(hook_id)
# or
hook.delete()
2.5.6 获取项目文件内容
f = project.files.get(file_path=git_path, ref=分支名)
file_content = f.decode()
file_content = file_content.decode()

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

python-gitlab 的相关文章

随机推荐

  • 制作Centos7自动安装镜像(三)

    文章总览 制作Centos7自动安装镜像 在这里说明一下 我们制作自动化安装镜像用的是linux的kickstart技术 这个技术的核心是制作一个ks cfg文件 将所有需要自动化安装的内容写成一个脚本 放置在镜像中 并在安装菜单中指定这个
  • 文件I/O和标准I/O的区别

    文件I O 文件I O是操作系统提供的操作文件的API 例如Linux中的open 和write 等 这些函数可以完成文件的操作 但是效率不一定很高 标准I O 标准I O是应用层提供的库函数 例如C语言提供的文件操作函数fopen fcl
  • Qt信息隐藏(Q_D/Q_Q)介绍

    目录 1 基本介绍与二进制兼容 2 二进制兼容的设计原则 3 常见c qt信息隐藏 4 Q Q Q D介绍 5 定制可编辑treewidget与如何访问基类的Private 6 总结 1 基本介绍与二进制兼容 作者虽然一直在linux做开发
  • Vue + Spring Boot 项目实战(分享)

    第一部分Vue Spring Boot 项目实战 一 项目简介Vue Spring Boot 项目实战 二 搭建 Vue js 项目Vue Spring Boot 项目实战 三 前后端结合测试 登录页面开发 Vue Spring Boot
  • Google earth engine学习笔记 2: 通过分析提取植被物候的代码学习gee 1

    Google earth engine学习笔记 2 通过分析提取植被物候的代码学习gee 1 通过一篇 根据 sentinel 2 影像计算植被指数并提取植被物候 的文章所附的代码学习gee 原作者的github 写这个东西是为了自己学习
  • python-scrapy框架(三)Pipeline文件的用法讲解

    Pipeline是一个独立的模块 用于处理从Spider中提取的Item对象 实现对数据的进一步处理 存储和清洗等操作 下面将详细介绍Scrapy框架中Pipeline的用法 1 创建Pipeline类 为了使用Pipeline类 我们需要
  • 物联网终端算法

    物联网终端算法是指在物联网终端设备上运行的各种算法 包括数据采集 数据预处理 数据传输 数据存储 数据处理 数据分析等算法 以下是物联网终端算法的一些具体应用 数据采集算法 用于采集各种传感器数据 包括温度 湿度 气压 光照 声音 震动等信
  • 华为OD机试 Java 实现【最优策略组合下的总的系统消耗资源数】【牛客练习题】,附详细解题思路

    目录 一 题目描述 二 输入描述 三 输出描述 四 解题思路 五 Java算法源码 六 效果展示 1 输入 2 输出 3 说明 4 思路 华为OD机试 2023B卷题库疯狂收录中 刷题点这里 一 题目描述 在通信系统中有一个常见的问题是对用
  • 0成本的售卖高考资料虚拟资源,这样的玩法顶得上一家大公司

    在这个快速发展 每天的信息成千上万的世界中 对于网络从业者来说 网络的信息就是金钱 以至于让活在当下的大多数年轻人 中年人 甚至在校学生 都会想在互联网这个金矿去分一块肉吃 但是每个人的时间都是平等的 一天24小时出去吃饭睡觉 甚至除去上班
  • 同时校验手机号和座机号

    文章目录 同时校验手机号和座机号 一 使用实例 同时校验手机号和座机号 filter方法是js中常用的方法 提示 以下是本篇文章正文内容 下面案例可供参考 一 使用实例 1 同时校验手机号和座机号 export function check
  • 机器学习-XGBoost

    一 XGBoost是什么 XGBoost是基于GBDT实现的 但GBDT算法只利用了一阶的导数信息 xgboost对损失函数做了二阶的泰勒展开 并在目标函数之外加入了正则项对整体求最优解 用以权衡目标函数的下降和模型的复杂程度 避免过拟合
  • 手机java开发环境,看完跪了

    01 分布式限流 Nginx ZooKeeper 1 1 分布式限流之Nginx 请解释一下什么是 Nginx 请列举 x Nginx 的一些特性 请列举 x Nginx 和 和 Apache 之间的不同点 请解释 x Nginx 如何处理
  • VUE实用技术点

    1 路由懒加载 能让你首次加载更快 路由懒加载可以让我们的包不需要一次把所有的页面的加载进来 只加载当前页面的路由组件就行 举个栗子 如果这样写 加载的时候会全部都加载进来 const router new VueRouter routes
  • ESDA in PySal (2) localjoincounts

    ESDA in PySal 2 localjoincounts 参考 https blog csdn net angel0929 article details 128433265 https blog csdn net allenlu20
  • 知乎转来的、、、Nuitka用法

    Python打包exe的王炸 Nuitka Python与模具 Python在制造领域的使用 关注 1 726 人 赞同了该文章
  • Ubuntu安装JDK1.8(手动解压JDK压缩包)

    1 官网下载JDK https www oracle com technetwork java javase downloads jdk8 downloads 2133151 html 2 解压缩 下载的版本jdk 8u211 linux
  • ubuntu18.04安装wireshark3.x与tshark3.x

    默认安装tshark会是2 x 以下是安装3 x的方法 使用命令 sudo add apt repository ppa wireshark dev stable sudo apt update 安装wireshark3 x sudo ap
  • IPv6 PMTUD 路径发现机制 工作原理

    Technorati 标签 IPv6 PMTUD PMTUD IPv6 PMTUD是IPv6的一个工作机制 其主要的目的就是 当网络源发送数据报文到目的的时候 避免分段 也可以称为分片 源节点可以使用发现整个路径上面最大的MTU与目的节点通
  • Android opengles2.0 背景透明

    在Android上开发OpenGL ES应用时 默认的背景不透明的 即使使用了glClearColor来设置了不透明度为0 且纹理图片中有透明的部分也可能被GLView的背景填充 那么首先解决GLView的透明背景问题吧 要设置透明的第一步
  • python-gitlab

    一 安装 pip install python gitlab 官方文档 http python gitlab readthedocs io en stable API https docs gitlab com ce api project