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

JIRA Groovy脚本问题:解决工作流中转重复创建子任务

嘿,这个重复创建子任务的坑我之前踩过!核心问题就是每次触发工作流时,没有校验已经为哪些SW版本创建过对应子任务,导致每次都会从头生成一遍。下面给你几个实用的解决思路:

解决方案思路

1. 给子任务打唯一标识标签

这是最直观的方法,给每个生成的子任务打上专属标签,创建前先查标签是否存在:

  • 创建子任务时,生成格式为 sw-version-[版本号]-[子任务类型] 的标签(比如 sw-version-1-debug、sw-version-2-test)
  • 每次触发工作流前,先根据当前选中的版本和子任务类型,检查已有子任务里是否存在对应标签
  • 只有不存在对应标签时,才创建新子任务

举个Jira Groovy脚本的伪代码示例:

// 获取选中的SW版本
def swVersionField = customFieldManager.getCustomFieldObjectByName("SW Version")
def selectedVersions = issue.getCustomFieldValue(swVersionField)
// 定义3个子任务类型
def subtaskTypes = ["Debug", "Test", "Deploy"]

selectedVersions.each { version ->
    subtaskTypes.each { type ->
        def uniqueTag = "sw-version-${version}-${type.toLowerCase()}"
        // 检查是否已有带该标签的子任务
        def existingSubtasks = issue.getSubtasks().findAll { subtask ->
            subtask.getLabels().contains(uniqueTag)
        }
        // 没有才创建
        if (existingSubtasks.isEmpty()) {
            def newSubtask = issueFactory.createIssue()
            newSubtask.setLabels([uniqueTag])
            newSubtask.setSummary("SW Version ${version} - ${type} 子任务")
            // 其他子任务属性设置(比如类型、经办人等)
            def createParams = issueService.newCreateInputParameters()
            createParams.setIssue(newSubtask)
            issueService.create(authContext, createParams)
        }
    }
}

2. 通过子任务摘要做唯一性校验

如果不想用标签,可以在子任务摘要里固定包含版本号和类型(比如 SW Version 1 - Debug 子任务),创建前先遍历现有子任务匹配摘要:

  • 优点:不用额外加标签字段
  • 缺点:要确保摘要不会被手动修改,否则校验会失效

3. 维护已处理版本的自定义字段

在主任务上新增一个隐藏的自定义字段(比如 已处理SW版本),用来记录已经生成过子任务的版本:

  • 每次触发工作流时,对比当前选中的SW Version和已处理SW版本,只处理未记录的版本
  • 创建完子任务后,把这些版本添加到已处理SW版本字段中
  • 好处是可以清晰看到哪些版本已经处理过,后续需要重新处理时也能手动调整记录
额外提醒

如果业务需求里有「用户移除SW版本时要删除对应子任务」的场景,可以在上述逻辑基础上,新增一步:对比已处理版本和当前选中版本,删除那些不在当前选中列表里的版本对应的子任务。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 09:07:07