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

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,提问作者منى

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 03:16:10