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

如何原生克隆包含子任务的Jira Epic?

原生Jira克隆带子任务的Epic方案

以下是几种无需第三方插件的原生实现方式:

1. 手动批量克隆(适合偶尔操作)

  • 克隆Epic主任务:打开目标Epic,点击右上角「更多」→「克隆」,填写新Epic的名称、描述等信息,完成克隆得到新Epic。
  • 批量克隆子任务:回到原Epic的子任务列表,选中所有需要复制的子任务,点击「批量操作」→「克隆」,在弹窗中将新子任务的「父任务」设置为刚创建的新Epic,按需选择是否复制评论、附件等附加内容。

2. Jira Automation自动化规则(适合重复操作)

通过自动化规则实现一键克隆,云版和服务器版均支持:

  • 触发条件:选择「手动触发」,添加待克隆Epic作为输入变量。
  • 操作步骤:
    • 克隆触发的Epic,将新Epic的Key保存为变量。
    • 用JQL查询原Epic的所有子任务:parent = {{triggerIssue.key}} AND issuetype in subtaskIssueTypes()
    • 遍历查询到的子任务,逐个克隆并设置父任务为新Epic的Key,同时复制需要的字段(如优先级、描述等)。

3. Jira REST API自定义脚本(适合开发集成)

适合有开发能力的场景,通过API实现完整克隆流程:

核心步骤:

  1. 调用GET /rest/api/3/issue/{epicKey}获取原Epic的字段数据。
  2. 调用POST /rest/api/3/issue创建新Epic,传入原Epic的字段信息(排除ID、Key等系统专属字段)。
  3. 调用GET /rest/api/3/search?jql=parent={epicKey} AND issuetype in subtaskIssueTypes()获取所有子任务。
  4. 遍历子任务,调用POST /rest/api/3/issue创建新子任务,设置parent字段为新Epic的Key,同步子任务的字段数据。

Python示例代码片段:

import requests
from requests.auth import HTTPBasicAuth

# 配置信息
JIRA_INSTANCE = "你的Jira实例地址"
API_TOKEN = "你的API令牌"
USER_EMAIL = "你的登录邮箱"
SOURCE_EPIC_KEY = "原Epic的Key"

# 创建新Epic
epic_detail = requests.get(
    f"{JIRA_INSTANCE}/rest/api/3/issue/{SOURCE_EPIC_KEY}",
    auth=HTTPBasicAuth(USER_EMAIL, API_TOKEN)
).json()

new_epic_data = {
    "fields": {
        "project": {"key": epic_detail["fields"]["project"]["key"]},
        "summary": f"克隆: {epic_detail['fields']['summary']}",
        "description": epic_detail["fields"]["description"],
        "issuetype": {"id": epic_detail["fields"]["issuetype"]["id"]},
        # 按需添加其他字段(如优先级、标签)
    }
}

new_epic_response = requests.post(
    f"{JIRA_INSTANCE}/rest/api/3/issue",
    json=new_epic_data,
    auth=HTTPBasicAuth(USER_EMAIL, API_TOKEN)
)
new_epic_key = new_epic_response.json()["key"]

# 克隆子任务
subtasks = requests.get(
    f"{JIRA_INSTANCE}/rest/api/3/search?jql=parent={SOURCE_EPIC_KEY} AND issuetype in subtaskIssueTypes()",
    auth=HTTPBasicAuth(USER_EMAIL, API_TOKEN)
).json()["issues"]

for subtask in subtasks:
    new_subtask_data = {
        "fields": {
            "project": {"key": subtask["fields"]["project"]["key"]},
            "summary": f"克隆: {subtask['fields']['summary']}",
            "description": subtask["fields"]["description"],
            "issuetype": {"id": subtask["fields"]["issuetype"]["id"]},
            "parent": {"key": new_epic_key},
            # 按需添加其他字段
        }
    }
    requests.post(
        f"{JIRA_INSTANCE}/rest/api/3/issue",
        json=new_subtask_data,
        auth=HTTPBasicAuth(USER_EMAIL, API_TOKEN)
    )

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 06:45:42