ScriptRunner创建Jira Issue后组件与版本不显示问题求助
Jira ScriptRunner创建Issue后组件/修复版本不显示的修复方案
问题根源
你直接修改Issues.create()返回的Issue内存对象,调用setFixVersions()和setComponents()后没有执行持久化操作,这些变更仅存在于内存中,不会同步到Jira数据库,因此界面看不到设置的字段值。同时Jira创建完成后的Issue对象默认处于只读状态,直接调用set方法无法生效。
修复方案
方案1:创建Issue时直接通过参数设置(推荐,一次操作完成)
使用Jira官方的IssueService和IssueInputParameters,在创建阶段就传入组件和修复版本参数,避免后续更新操作:
import com.atlassian.jira.component.ComponentAccessor import com.atlassian.jira.issue.IssueInputParameters def issueService = ComponentAccessor.getIssueService() def currentUser = ComponentAccessor.jiraAuthenticationContext.loggedInUser // 构建Issue输入参数,替换为你的实际项目/问题类型信息 def issueInputParams = issueService.newIssueInputParameters() issueInputParams.setProjectId(12345) // 项目ID issueInputParams.setIssueTypeId("10000") // 问题类型ID issueInputParams.setSummary("你的问题标题") // 直接传入预定义的修复版本列表(List<Version>类型) issueInputParams.setFixVersions(mynewVersions) // 直接传入预定义的组件列表(List<ProjectComponent>类型) issueInputParams.setComponents(mynewComponentList) // 执行创建验证与操作 def createValidation = issueService.validateCreate(currentUser, issueInputParams) if (createValidation.isValid()) { def createResult = issueService.create(currentUser, createValidation) if (createResult.isValid()) { log.info("Issue创建成功,KEY: ${createResult.issue.key}") } else { log.error("创建失败: ${createResult.errorCollection}") } } else { log.error("参数验证失败: ${createValidation.errorCollection}") }
方案2:创建后通过IssueService执行更新(适用于必须先创建再修改的场景)
如果需要先创建基础Issue再补充字段,必须通过IssueService执行更新操作来持久化变更:
import com.atlassian.jira.component.ComponentAccessor import com.atlassian.jira.issue.IssueInputParameters def issueService = ComponentAccessor.getIssueService() def currentUser = ComponentAccessor.jiraAuthenticationContext.loggedInUser // 原创建逻辑,得到初始Issue对象 def newIssue = Issues.create(...) // 构建更新参数 def updateParams = issueService.newIssueInputParameters() updateParams.setFixVersions(mynewVersions) updateParams.setComponents(mynewComponentList) // 验证并执行更新 def updateValidation = issueService.validateUpdate(currentUser, newIssue.id, updateParams) if (updateValidation.isValid()) { def updateResult = issueService.update(currentUser, updateValidation) if (updateResult.isValid()) { log.info("Issue更新成功,组件与修复版本已设置") } else { log.error("更新失败: ${updateResult.errorCollection}") } } else { log.error("更新参数验证失败: ${updateValidation.errorCollection}") }
关键注意事项
- 确保
mynewVersions是List<Version>类型,mynewComponentList是List<ProjectComponent>类型,不能传入字符串或其他非Jira内置对象 - 检查执行脚本的用户是否拥有创建Issue以及修改组件/修复版本字段的权限
- 确认目标项目的对应问题类型已启用组件和修复版本字段(部分问题类型可能默认隐藏这些字段)
内容的提问来源于stack exchange,提问作者منى
相关产品推荐
相关产品推荐

