Создавать проблемы на основе данных, полученных из внешних систем - malikovalibek/groovyForJira GitHub Wiki

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

пример Я отвечаю за внедрение проекта Jira в компанию. Каждый раз, когда к нашей внешней системе управления персоналом добавляется новый сотрудник, я хочу, чтобы задачи Jira создавались на основе их отдела. Я могу использовать этот скрипт для подключения к REST API этой системы, получения необходимых данных и автоматического создания проблем, что сэкономит мне время и силы на создание проблем вручную.

Хорошо знать Тип внешней задачи можно определить как новый тип, чтобы определить, какие проблемы были созданы внешней системой. Внешнюю систему можно настроить с учетом необходимых требований. В этом примере спецификации внешней системы: Никакой аутентификации не требуется. Если требуется аутентификация, ее можно добавить в вызов конечной точки благодаря библиотеке HTTP Unirest . Параметр запроса с именем «отметка времени» необходим для указания даты поиска. Полученный результат представляет собой список объектов JSON, в котором каждый объект имеет свойство с именами «имя» и «сообщение». На основе этой информации в Jira можно создавать новые задачи.

import java.time.LocalDateTime import java.time.ZoneOffset

final projectKey = 'TEST' //External task type name final externalIssueTypeName = 'External Task' //External system URL final externalUrl = 'https://external.system'

//We can compute the time between epoch and one hour before now in order to obtain issues from external by this time. def timestamp = LocalDateTime.now() .minusHours(1) .toInstant(ZoneOffset.UTC).toEpochMilli()

def taskType = get('/rest/api/2/issuetype') .asObject(List) .body .find { it['name'] == externalIssueTypeName } ['id']

//We can define here the endpoint to get issues from the external system and the query strings that are needed. //In this example, we use "since" as a query string parameter where is defined the time by which we want to search. def results = get("$externalUrl/rest/api/1/results") .queryString('since', timestamp) .asObject(List) .body as List

//For every result obtained, a new issue is created. results.each { Map result -> post('/rest/api/2/issue') .header('Content-Type', 'application/json') .body([ fields: [ summary : result.name, description: result.message, project : [ key: projectKey ], issuetype : [ id: taskType ] ] ]) .asString().body }

⚠️ **GitHub.com Fallback** ⚠️