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

Jira ScriptRunner后置函数问题:关联Issue无法插入Comment

Jira ScriptRunner后置函数评论不显示问题排查与修复

核心问题

点击「MounaFixReleased」菜单项后,日志能正常打印关联Issue的评论内容,但评论未实际插入到Issue中。

问题定位

日志输出正常说明评论内容生成逻辑无问题,问题出在评论的持久化环节,结合代码分析有以下几个关键原因:

1. IssueService过渡参数未生效

你通过inputParameters.setComment(defectComment)给过渡动作附加评论,但部分Jira工作流过渡配置中,即使跳过验证/权限,过渡动作本身可能不支持携带评论字段,导致评论被丢弃。

2. 关联Issue筛选逻辑不严谨

当前代码仅通过IssueTypeId筛选关联Issue,未校验链接类型是否为「Resolves」,可能误处理了其他关联关系的Issue,导致评论加到了错误对象上。

3. getCurrentUser方法存在空指针隐患

方法中使用了未定义的gc变量,当当前用户为空时会抛出异常,中断后续逻辑。

修复方案

方案一:强制手动添加评论

在过渡动作执行后,直接调用CommentManager给关联Issue添加评论,不依赖过渡参数:

void PerformTransition(Issue linkedissue, String transitionToBeDone, Issue sourceObject) {
  def defectComment = "Fix FIXSUMMARY[ISSUEKEY] has been released by USERNAME[USER].";

  // ... 原有代码省略 ...

  try {
    if (result.isValid()) {
      log.warn("CAM 5 " + defectComment)
      issueService.transition(currentUser, result)
      log.warn("CAM 6 " + defectComment)
      
      // 手动添加评论,确保写入Issue
      CommentManager commentManager = ComponentAccessor.getCommentManager()
      commentManager.create(linkedissue, currentUser, defectComment, false)
    }
  } catch (Exception e) {
    log.warn("CAM 6 " + e)
    log.warn(result.getErrorCollection().getErrors())
  }
}

方案二:修正关联Issue筛选逻辑

添加「Resolves」链接类型校验,确保只处理目标关联Issue:

// 初始化获取Resolves链接类型
def linkManager = ComponentAccessor.getIssueLinkManager()
def resolveLinkType = linkManager.getIssueLinkTypes().find { it.name == "Resolves" }

// 处理向外链接
for (IssueLink link in linksOut) {
  if (link.getLinkTypeId() == resolveLinkType.id && link.getDestinationObject().getIssueTypeId().equals("5")) {
    links.add(link)
  }
}

// 处理向内链接
for (IssueLink link in linksIn) {
  if (link.getLinkTypeId() == resolveLinkType.id && link.getDestinationObject().getIssueTypeId().equals("5")) {
    links.add(link)
  }
}

方案三:修复getCurrentUser方法空指针

替换未定义的gc变量为具体默认用户:

ApplicationUser getCurrentUser() {
  ApplicationUser user = ComponentAccessor.getJiraAuthenticationContext().getUser();
  if (user == null) {
    // 替换为你的Jira默认用户名
    user = ComponentAccessor.getUserManager().getUserByName("admin");
  }
  return user;
}

验证步骤

  1. 执行动作后,检查关联Issue的全部评论(包括内部评论,因为设置了false不触发事件,不会在通知中显示)
  2. 查看Jira日志中是否有CommentManager相关的错误信息
  3. 确认关联Issue的工作流过渡动作是否允许添加评论

内容的提问来源于stack exchange,提问作者منى

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 21:10:47