Преобразование данных настраиваемого поля в объекты версии - malikovalibek/groovyForJira GitHub Wiki

Обзор При работе в Jira вы часто имеете дело с беспорядочными данными, импортированными из устаревшей системы или другого внешнего источника данных, и их трудно запросить. Преобразование этих данных с помощью скриптов - мощный способ упростить поиск необходимых проблем.

пример Я разработчик, и моя система сборки автоматически импортирует информацию о версии в обычное текстовое настраиваемое поле в Jira. В этом текстовом поле содержится много информации, которую я хотел бы запросить (например, дата выпуска и номер версии); однако его нелегко проанализировать с помощью обычного JQL.

ScriptRunner имеет функцию, которая может запрашивать проблемы по дате выпуска их версии исправления. Преобразование этих текстовых значений в версии в проекте позволило бы мне эффективно запрашивать их.

Этот сценарий берет все проблемы в примере проекта, анализирует значение в поле Версия внешней системы, создает версию в проекте с соответствующей датой выпуска и обновляет каждую проблему, чтобы иметь правильную версию исправления.

Этот сценарий был продемонстрирован на нашем веб-семинаре Groovy Scripting for ScriptRunner .

Хорошо знать Этот сценарий предполагает версию формата "com.example.whatsit.a4e7e26c4c7ab74be8f13900add1e44.2008-09-20T19: 33: 23.100.1.0" Может быть несколько версий, разделенных запятыми, например "com.example.whatsit.a4e7e26c4c7ab74be8f13900add1e44.2008-09-20T19: 33: 23.100.1.0, com.example.whatsit.a13e726c4cbu7t4be8f13add1e44.2008-09-21T 23.100.1.1 " У нас есть CSV с примерами данных о проблемах , которые вы можете загрузить и импортировать в свой экземпляр Jira. С участием ScriptRunner для Jira от Adaptavist

Создано 9 месяцев назад , Обновлено 5 месяцев назад

Код сервера Код центра обработки данных

Требования

import com.atlassian.jira.bc.issue.search.SearchService import com.atlassian.jira.component.ComponentAccessor import com.atlassian.jira.jql.parser.JqlQueryParser import com.atlassian.jira.web.bean.PagerFilter

import java.time.LocalDateTime import java.time.ZoneId import java.time.format.DateTimeFormatter

final PROJECT_KEY = "WEBI" final CUSTOM_FIELD_NAME = "External System Version"

def issueService = ComponentAccessor.issueService def projectManager = ComponentAccessor.projectManager def versionManager = ComponentAccessor.versionManager

def project = projectManager.getProjectByCurrentKey(PROJECT_KEY) def loggedInUser = ComponentAccessor.jiraAuthenticationContext.loggedInUser

def searchService = ComponentAccessor.getComponent(SearchService) def jqlQueryParser = ComponentAccessor.getComponent(JqlQueryParser) def query = jqlQueryParser.parseQuery("project = $PROJECT_KEY and '$CUSTOM_FIELD_NAME' is not EMPTY") def searchResults = searchService.search(loggedInUser, query, PagerFilter.unlimitedFilter)

def customFieldManager = ComponentAccessor.customFieldManager def externalSystemVersionField = customFieldManager.getCustomFieldObjectsByName(CUSTOM_FIELD_NAME).first()

final datePattern = DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss")

searchResults.results.each { issue -> log.debug "Looking at issue ${issue.key}" def importedVersion = issue.getCustomFieldValue(externalSystemVersionField).toString()

def roughVersions = importedVersion.tokenize(',')
def realVersions = roughVersions.collect { roughVersion ->
    def parts = roughVersion.tokenize('.')
    def dateString = parts[4]
    def versionName = parts[5..7].join('.')
    log.debug "Trying to create version $versionName with date string $dateString"

    def releaseDate = LocalDateTime.parse(dateString, datePattern).atZone(ZoneId.systemDefault())
    def priorVersions = project.versions.toList().findAll {
        this.compareVersions(it.name, versionName) < 0
    }.sort {
        this.compareVersions(it.name, versionName)
    }

    Long afterVersionId = priorVersions.empty ? -1L : priorVersions.last().id
    project.versions.find { it.name == versionName } ?: versionManager.createVersion(
        versionName,
        null,
        Date.from(releaseDate.toInstant()),
        "",
        project.id,
        afterVersionId,
        true
    )
}

Long[] fixVersionIds = realVersions*.id
def inputParameters = issueService.newIssueInputParameters().setFixVersionIds(fixVersionIds)

def validationResult = issueService.validateUpdate(loggedInUser, issue.id, inputParameters)
if (validationResult.isValid()) {
    def updateResult = issueService.update(loggedInUser, validationResult)
    if (updateResult.valid) {
        log.debug "Successfully updated issue ${issue.key}"
    } else {
        log.error "Failed to update $issue.key"
        log.error updateResult.errorCollection*.errorMessages
    }
}

}

/**

  • Compare two version strings as a java.util.Comparator
  • @param version1
  • @param version2
  • @return / Integer compareVersions(String version1, String version2) { def parts1 = version1.tokenize('.').toInteger() def parts2 = version2.tokenize('.')*.toInteger() if (parts1[0] == parts2[0]) { if (parts1[1] == parts2[1]) { return parts1[2] - parts2[2] } return parts1[1] - parts2[1] } parts1[0] - parts2[0] }