Создайте временный план, когда проблема назначается пользователю - malikovalibek/groovyForJira GitHub Wiki
Обзор
Этот скрипт позволяет создавать планы Tempo для задачи Jira, когда эта задача была назначена. План Tempo создается на каждый день между текущей датой и сроком выполнения. Оставшаяся оценка используется как плановое время для вновь созданных планов. Этот сценарий использует конечную точку Tempo REST с базовой аутентификацией в заголовках запроса. Авторизованный пользователь должен иметь разрешение на просмотр планов для пользователей; в противном случае API не возвращает планы. Подробнее о разрешениях в Tempo читайте в этой статье .
пример
Как руководитель проекта, я хочу создавать все планы автоматически, когда проблема назначается пользователю, что экономит время на ручной настройке планов для каждой задачи в моем проекте. Я могу использовать этот сценарий для автоматизации создания этих планов.
Хорошо знать
Для этого скрипта требуется Tempo Planner от Tempo для Jira. Учетные данные запроса API хранятся как свойства пользователя. Это свойство называется , как basicAuthCredsи он содержит имя пользователя и пароль в следующем формате: :. Пример установки / получения свойств пользователя см. В документации библиотеки . Установите прослушиватель сценария для Issue Assignedсобытия, чтобы после создания, обновления или удаления элемента Tempo сценарий выполнялся.
С участием
ScriptRunner для Jira от Adaptavist
Планировщик темпа от Tempo
Создано 3 месяца назад
Код сервера Код центра обработки данных
Требования
JiraJira (7,7 - 8,6)
import com.atlassian.jira.component.ComponentAccessor import com.atlassian.jira.config.properties.APKeys import com.onresolve.scriptrunner.runner.customisers.WithPlugin import groovyx.net.http.ContentType import groovyx.net.http.EncoderRegistry import groovyx.net.http.HttpResponseDecorator import groovyx.net.http.RESTClient
import java.time.LocalDate import java.time.format.DateTimeFormatter
@WithPlugin('com.tempoplugin.tempo-plan-core')
// The user-defined property where the user name and password are stored into final userPropertyKey = 'jira.meta.basicAuthCreds' // Default start time final startTime = '09:00' // Weekends and holidays are not included by default. If a plan needs to be created on weekends and holidays, set this to "true" final includeNonWorkingDays = false final today = LocalDate.now()
def issue = event.issue def endDate = issue.dueDate?.toLocalDateTime()?.toLocalDate()
// Do nothing if the issue has been unassigned if (!issue.assignee) { return }
if (!issue.estimate || !endDate) { log.error 'Issue has not an estimation or a due date, so the plan cannot be created' return }
def loggedInUser = ComponentAccessor.jiraAuthenticationContext.loggedInUser def credentials = ComponentAccessor.userPropertyManager.getPropertySet(loggedInUser).getString(userPropertyKey) def baseUrl = ComponentAccessor.applicationProperties.getString(APKeys.JIRA_BASEURL)
def client = new RESTClient(baseUrl) client.encoderRegistry = new EncoderRegistry(charset: 'UTF-8') client.setHeaders([ Authorization : "Basic ${credentials.bytes.encodeBase64().toString()}", "X-Atlassian-Token": "no-check" ])
client.handler.failure = { HttpResponseDecorator response -> log.error "There was an error creating the plan: ${response.entity.content.text}" [] } client.handler.success = { resp, reader -> [response: resp, reader: reader] }
client.post( path: '/rest/tempo-planning/1/plan', contentType: ContentType.JSON, body: [ planItemType : 'ISSUE', planItemId : issue.id, assigneeKey : 'admin', start : DateTimeFormatter.ISO_LOCAL_DATE.format(today), startTime : startTime, day : DateTimeFormatter.ISO_LOCAL_DATE.format(today), end : DateTimeFormatter.ISO_LOCAL_DATE.format(endDate), includeNonWorkingDays: includeNonWorkingDays, secondsPerDay : issue.estimate ] )