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
相关产品推荐
相关产品推荐

