Преобразование данных настраиваемого поля в объекты версии - 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] }