You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过Python脚本调用GitLab Premium API将Issue升级为Epic?

用python-gitlab v3.14.0批量将GitLab Issue升级为Epic

GitLab Premium/Ultimate提供了API支持将Issue转换为Epic,结合python-gitlab可以轻松实现批量操作。以下是具体实现方案:

核心思路

GitLab的专属API端点POST /projects/:id/issues/:issue_iid/convert_to_epic负责处理Issue转Epic的逻辑,python-gitlab v3.14.0可以通过两种方式调用该接口:

方法1:使用python-gitlab原生封装方法(推荐)

Issue对象内置了convert_to_epic()方法,直接调用即可完成转换:

import gitlab

# 初始化GitLab客户端
gl = gitlab.Gitlab("https://你的GitLab实例地址", private_token="你的访问令牌")

# 目标项目ID
target_project_id = 123
# 需要转换的Issue IID列表
issue_iids_to_convert = [45, 67, 89]

project = gl.projects.get(target_project_id)

for iid in issue_iids_to_convert:
    try:
        issue = project.issues.get(iid)
        # 执行转换并获取生成的Epic对象
        converted_epic = issue.convert_to_epic()
        print(f"Issue #{iid} 已转为Epic,ID: {converted_epic.id}")
    except gitlab.GitlabError as err:
        print(f"转换Issue #{iid} 失败: {err}")

方法2:直接调用原生API端点(备选)

如果原生方法出现兼容性问题,可直接发送HTTP请求:

import gitlab

gl = gitlab.Gitlab("https://你的GitLab实例地址", private_token="你的访问令牌")
target_project_id = 123
issue_iids_to_convert = [45, 67, 89]

for iid in issue_iids_to_convert:
    try:
        api_path = f"/projects/{target_project_id}/issues/{iid}/convert_to_epic"
        # 发送POST请求触发转换
        response_data = gl.http_post(api_path)
        # 获取转换后的Epic详情
        converted_epic = gl.epics.get(response_data["id"])
        print(f"Issue #{iid} 已转为Epic,ID: {converted_epic.id}")
    except gitlab.GitlabError as err:
        print(f"转换Issue #{iid} 失败: {err}")

关键注意事项

  • 仅GitLab Premium/Ultimate版本支持该功能,免费版无法使用
  • 访问令牌需要拥有项目管理员权限或Issue/Epic的操作权限
  • 转换后原Issue会自动关闭,评论、标签、里程碑等数据会迁移至新Epic
  • 批量操作时建议添加time.sleep(1)之类的延迟,避免触发API速率限制

内容的提问来源于stack exchange,提问作者Mutagon

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.21 20:03:30