如何使用 pythongitlab 自动创建 GitLab Label

2023年 1月 4日 40.2k 0

利用 Gitlab issue 进行项目管理是一件对 Dev 十分友好的事。录入issue、发起 Merge Request、创建 milestone,这些都是开发过程中动态推进的。但,每个新项目都需要创建一堆 Label ,是件让人头疼的事。本文主要就是为了解决这个问题。

1. GitLab Label

在创建 GitLab Label 之前,我们先得规范一下 Label 的格式。GitLab Label 主要用于对 issue 分类管理和过滤查看。比较推荐的一种用法是,采用 “{type}/{value}” 标签,而不是 “{value}"。这样的二维标签可以表示更多的信息。

1.1 标签类别

  • type/feature对新功能的请求
  • type/enhancement对功能的改进、增强、重构。
  • type/bug不符合预期的小问题
  • type/question比较严重的问题
  • type/test与测试相关的问题

1.2 优先级:priority

优先级标签指定应处理问题的优先级。

  • priority/critical这个问题现在应该修复
  • priority/high这个问题应该尽快解决
  • priority/low这个问题不是高优先级问题,可以在以后处理。该标签允许记录问题,而无需立即处理

1.3 价值

价值标签描述了谁从这个问题中受益。这有助于更好地安排问题。

  • value/client这个问题将使客户受益
  • value/admin这个问题将使管理员用户受益。有时管理员用户不一定是客户端
  • value/developer这个问题将使开发人员受益

1.4 更改

更改标签对所涉及的变化进行了粗略估计。

  • change/minor这个问题通常需要几个小时或更短的时间。
  • change/medium这个问题花了不到一天的时间,但这不是一个快速解决方案。
  • change/major这个问题涉及重大变化,需要1天以上。

1.5 杂项

这些是非常重要的标签,应根据需要使用。

  • others/needs-discussion这个问题需要进一步讨论才能得到解决。

我们会尽可能多地查询具有此标签的所有内容,并与相关各方进行讨论。一旦我们完成讨论,我们通常会删除标签,但有时我们无法决定我们想要决定的内容,因此我们将标签留在那里,将项目推送到下一次会议。

  • others/in-progress这个问题正在进行中。此标签告诉正在处理该问题的人(分配标签的人)并阻止其他人开始处理同一问题。
  • others/duplicate这个问题与另一个功能请求或错误报告重复。

2. gitlab-python

python-gitlab 是一个 Python 软件包,提供对 GitLab 服务器 API 的访问。它支持 GitLab 的 v3 和 v4 API,并提供了一个 CLI 工具。python-gitlab 兼容 Python 2.7 和 Python 3.4 及以上版本。

2.1 安装 python-gitlab

1
pip install python-gitlab -i http://pypi.douban.com/simple/ --trusted-host pypi.douban.com

2.2 配置访问权限

这里将配置文件放在 $HOME 目录下。

1
vim ~/.python-gitlab.cfg

python-gitlab 还支持配置系统级的访问权限文件,启动时指定配置访问权限文件。具体配置,请参考这里。

1
2
3
4
5
6
7
8
9
[global]
default = gitlab-yourdomain
ssl_verify = false
timeout = 5

[gitlab-yourdomain]
url = https://gitlab.yourdomain.com
private_token = _AR7QqJ-hp4zLbZjVi6S
api_version = 4

这里的 private_token 可以在你的 GitLab 主页生成,http://gitlab.yourdomain.com/profile/personal_access_tokens。如下图:

2.3 常用命令

  • Console 中获取第一页 project
1
gitlab project list
  • Python 脚本

在 Python 脚本中访问 GitLab API 需要先获取到 gitlab 操作实例。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
import gitlab

gitlab_url = 'http://gitlab.yourdomain.com'
gitlab_token = '_AR7QqJ-hp4zLbZjVi6S'

# 登录
gl = gitlab.Gitlab(gitlab_url, gitlab_token)
# 获取第一页 project
projects = gl.projects.list()
# 获取所有的project
projects = gl.projects.list(all=True)

这里是创建项目需要的 Label 的 Python 脚本。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
# -*- coding: utf-8 -*-
import gitlab

gitlab_url = 'http://gitlab.yourdomain.com'
gitlab_token = '_AR7QqJ-hp4zLbZjVi6S'

# 登录
gl = gitlab.Gitlab(gitlab_url, gitlab_token)

# 通过 "空间名/项目""名获取 project 对象
project = gl.projects.get('namespace/project_name')

# 获取所有 label
labels = project.labels.list()

# 删除全部 label
for label in labels:
    label.delete()

# 创建项目的 label
# 类型 type
# 优先级 priority
# 价值 value
# 更改 changeA
# 杂项 others
all_label_list = {
    'type': [('feature', '#52BE80'), ('enhancement', '#5DADE2'), ('bug', '#E59866'), ('question', '#D35400'), ('test', '#A9CCE3')],
    'priority': [('critical', '#E74C3C'), ('high', '#F4D03F'), ('low', '#F5CBA7')],
    'value': [('client', '#AED6F1'), ('admin', '#D6DBDF'), ('developer', '#3498DB')],
    'change': [('minor', '#EBDEF0'), ('medium', '#BB8FCE'), ('major', '#8E44AD')],
    'others': [('needs-discussion', '#2E86C1'), ('in-progress', '#D68910'), ('duplicate', '#85929E')]}

for key in all_label_list:
    for label in all_label_list[key]:
        project.labels.create(
            {'name': ''.join([key, '/', label[0]]), 'color': label[1]})

# 创建一个 tag
# tag = project.tags.create({'tag_name':'V1.0.0', 'ref':'master'})

# 获取所有 commit info
# commits = project.commits.list()
# for c in commits:
#     print c.author_name, c.message, c.title

# 获取指定 commit 的 info
# commit = project.commits.get('2f597633')

#  创建一个 merge request
# mr = project.mergerequests.create({'source_branch':'bugfix',
#                                    'target_branch':'master',
#                                    'title':'fix db coding', })
# 更新一个 merge request 的描述
# mr.description = 'some description'
# mr.save()

执行之后的效果,是这样:

3. 参考

  • http://python-gitlab.readthedocs.io/en/stable/
  • http://docs.sitestacker.com/articles/gitlab-labels.html

相关文章

KubeSphere 部署向量数据库 Milvus 实战指南
探索 Kubernetes 持久化存储之 Longhorn 初窥门径
征服 Docker 镜像访问限制!KubeSphere v3.4.1 成功部署全攻略
那些年在 Terraform 上吃到的糖和踩过的坑
无需 Kubernetes 测试 Kubernetes 网络实现
Kubernetes v1.31 中的移除和主要变更

发布评论