Связаться по Skype: vkarabedyants
Позвонить Написать
+7 (499) 404-28-83

Блог о системном администрировании серверов и сайтов

Установка, настройка программного обеспечения Linux, Windows операционных систем

Интеграция Jira с различным ПО

Тетушка Жира, скажите пожалуйста…

В этой статье мы продолжаем говорить об автоматизации и интеграции Жира с другими системами.

В частности не так давно специалистами нашей компании было разработано решение по интеграции некоторого ПО (назовем его «Х») с Atlassian Jira.

Несколько слов о приложении «Х». Это решение, которое работает на PHP, имеет веб-интерфейс для пользователя и конечно же является чуть ли не центром вселенной для  бизнеса небольшой компании. Не правда ли – знакомая ситуация?

Задача стояла следующая: отображать в приложении состояние задач по каждому клиенту и при необходимости создавать новую задачу со страницы клиента.

С первого взгляда все просто: у Jira есть REST API. Обращайся к ней по http и получай ответы. Но на практике есть некоторые тонкости. Например, в нашем случае было решено формировать запросы с помощью JavaScript и AJAX. Запросы, которые требуется посылать серверу Jira, получаются кросс-доменные, потому что ПО «Х» и сервер Jira стоят на разных серверах, не имеющих ничего общего кроме владельца. Также они могут быть особого типа. Из соображений безопасности кросс-доменные запросы нестандартных типов запрещены по умолчанию. Для того, чтобы их разрешить нужно дать команду веб серверу, выставлять правильные значения в заголовках ответа. В Jira такой возможности нет. Проблема известна как Bug и на данный момент она находится на стадии решения.

В некоторых подобных случаях помогает использование Type: JSONP вместо JSON при формировании AJAX запроса. Тогда клиент  действительно получает ожидаемую строку. Но поскольку этот тип имеет иное предназначение, браузер эту строку пытается трактовать, как JS код. Что вполне правильно. Для того, чтобы понять – почему, нужно обратиться к описанию типа JSONP  и функционалу, который в него вложен. Мы уверены, что с этим вы легко справитесь самостоятельно.

На одном из форумов поддержки продуктов Atlassian некий специалист дал дельный совет: “Ждите, пока баг поправят или используйте cURL”.

cURL – это свободно распространяемая кроссплатформенная утилита позволяющая обмениваться данными по различным протоколам с синтаксисом URL. По сути программа является оберткой для библиотеки Libcurl. Libcurl имеет модули для интеграции с большим количеством языков программирования (согласно википедии – более 30).

интеграция jira и php

В нашем случае решение получилось следующим:

Клиентское ПО «Х» в JavaScript формирует строку  запроса к Jira, тип запроса и набор данных для передачи. Далее с помощью AJAX передает сформированные данные PHP скрипту, который в свою очередь передает эти данные с помощью cURL (в реализации для php) на сервер Jira. Сервер обрабатывает запрос и выдает ответ, который в таком же виде передается клиенту для последующей обработки. Собственно все.

Уже в процессе реализации наткнулись на неожиданное, но логичное поведение. Спецсимволы (“=”,“&”) в строке запроса к Jira (которая при передаче между JavaScript и PHP являлась частью данных) воспринимались, как разделители параметров запроса. Пришлось их маскировать на стороне JavaScript и восстанавливать на стороне PHP.

Ну и в завершение – несколько слов о том, что мы «спрашивали» у Jira, чтобы получить необходимую нам информацию.

Для того, чтобы получить информацию о задачах определенного клиента мы использовали метод /rest/api/2/search. В параметрах к нему можно указать JQL фильтр, чтобы уменьшить объемы выдаваемых задач.

Для того, чтобы создать задачу мы использовали несколько методов:

метод /rest/api/2/issue/createmeta, чтобы получить список проектов и типов  задач в каждом проекте (к слову сказать, среди свойств проектов и свойств типов задач не возможно найти эту связку). Задавая параметры для этого метода можно отфильтровать полученные результаты, а также получить список полей для каждого типа задач. Чтобы получить список – необходимо добавить

метод /rest/api/2/issue/ чтобы непосредственно создать задачу.

Ничего сложного, когда знаешь, что делать. Как собственно и в любом другом деле.

Если Вы чего-то не знаете, Вы всегда можете обратиться к специалистам нашей компании. Мы рады Вам помочь! [email protected]

Оставить комментарий

Лимит времени истёк. Пожалуйста, перезагрузите CAPTCHA.