2017-10-17 153 views
1

我想在所有链接的故事和任务处于状态“完成”时自动关闭史诗。我不擅长groovy,还是新鲜的,并试图找到我的脚。所以,我有以下脚本:关闭史诗,当所有的故事过渡完成

import com.atlassian.jira.component.ComponentAccessor 
import com.atlassian.jira.issue.Issue 
import com.atlassian.jira.issue.MutableIssue 
import com.onresolve.scriptrunner.runner.customisers.ContextBaseScript 
import groovy.transform.BaseScript 
import org.apache.log4j.Logger 

@BaseScript ContextBaseScript context 

def issueLinkManager = ComponentAccessor.getIssueLinkManager() 
def issueService = ComponentAccessor.getIssueService() 

def currentUser = ComponentAccessor.jiraAuthenticationContext.getLoggedInUser() 

def isEpicInProgress = {Issue epic -> 
    if (epic.issueType.name == "Epic") { 
     if (epic.statusObject.name != "Done") { 
      return true 
     } else { 
      return false 
     } 
    } 
} 

def isStoryClosed = {Issue story -> 
    if (story.statusObject.name == "Done") { 
     return true 
    } else { 
     return false 
    } 
} 

def updateEpic = {Issue epic -> 
    if (isEpicInProgress) { 
     def parameters = issueService.newIssueInputParameters() 
     def result = issueService.validateTransition(currentUser, epic.id, 31, parameters) 
     issueService.transition(currentUser, result) 
     log.warn("Epic update to " + result) 
    } 
} 

def isEpicClosable = {Issue epic -> 
    def finalResult = true 

    issueLinkManager.getOutwardLinks(epic.id).each { link -> 
     def story = link.destinationObject 
     def closedStory = isStoryClosed(story) 
     finalResult = closedStory && finalResult 
    } 
    log.warn("Final result is " + finalResult); 
    return finalResult 
} 

issueLinkManager.getInwardLinks(issue.id).each { link -> 
    def linkTypeId = link.getLinkTypeId() 
    def isEpicOfLinkType = 10300 
    if (isEpicOfLinkType == linkTypeId) { 
     def epic = link.sourceObject 
     if (isEpicInProgress(epic)) { 
      if (isEpicClosable(epic)) { 
       updateEpic(epic) 
      } 
     } 
    } 
} 

JIRA抱怨如下:

story.statusObject.name已经过时 - >我不知道如何找到新的一个

我得到的第二个问题是,除了上述警告,脚本运行时没有产生任何错误,但Epic无法自动转换。 enter image description here 以上是故事发布类型的工作流程 enter image description here 以上是史诗发布类型。

请帮助:)

回答

0

For your warning: 而不是getStatusObject(),使用的getStatus()。它做同样的事情,但不被弃用。

updateEpic()您有:

def result = issueService.validateTransition(currentUser, epic.id, 31, parameters) 
issueService.transition(currentUser, result) 

你的结果变量是TransitionValidationResult一个实例,实现ServiceResult。它包含警告和错误的集合。您应该检查/记录这些信息,以确定转换过程中出现了什么问题。要简单地检查您的转换是否成功,请使用result.isValid()