15
И никуда не надо ехать! JIRA: dashboards и SOAP API Никита Налютин, Undev.ru

Chiefconfetqa nalutin

Embed Size (px)

Citation preview

Page 1: Chiefconfetqa nalutin

И никуда не надо ехать!

JIRA: dashboards и SOAP API

Никита Налютин, Undev.ru

Page 2: Chiefconfetqa nalutin

О чем мы сегодня?

● Какие отчеты бывают● Какие средства есть в JIRA для

облегчения подготовки отчетов (dashboards)

● Как можно генерировать отчеты при помощи внешних скриптов (SOAP API в Python)

Page 3: Chiefconfetqa nalutin

Тикеты в scope релиза

Page 4: Chiefconfetqa nalutin

Открытые баги

Page 5: Chiefconfetqa nalutin

Сводные таблицы и диаграммы

Page 6: Chiefconfetqa nalutin

Собираем все вместе

Page 7: Chiefconfetqa nalutin

SOAP API: когда нам нужно большее

● SOAP — протокол обмена данными с сервером

● Клиент и сервер обмениваются друг с другом маленькими XML-документами

Page 8: Chiefconfetqa nalutin

Необходимые библиотеки

● PyXML 0.8.4

● SOAPpy 0.11.6

● fpconst 0.7.2

● Еще есть библиотека● Jira-cli-1.5.0

про нее в этой презентации ничего не сказано :)

Page 9: Chiefconfetqa nalutin

Установление соединения

import SOAPpy;

soap = SOAPpy.WSDL.Proxy('http://jira-server/rpc/soap/jirasoapservice-v2?wsdl')

jirauser='user1'

passwd='pass1'

auth = soap.login(jirauser, passwd)

Page 10: Chiefconfetqa nalutin

Словари

statuses = soap.getStatuses(auth)

priorities = soap.getPriorities(auth)

resolutions = soap.getResolutions(auth)

st = dict()

for status in statuses:

st[status['id']] = status['name']

Page 11: Chiefconfetqa nalutin

Запросы

● JQL запросы:issuesFromTextSearch = soap.getIssuesFromJqlSearch(auth, 'project = DEV AND (issuetype = "DEV: QA testing " AND "Affects Patch/es" = "*point") AND status in ("DEV: Resolved", "DEV: Developed")', 10000);

● Сохраненные из фильтра:issues = soap.getIssuesFromFilter(auth, "17395")

Page 12: Chiefconfetqa nalutin

Атрибуты тикетов

for issue in issues:

priority = pr[issue['priority']]

status = st[issue['status']]

if not issue['resolution'] == None:

resolution = res[issue['resolution']]

else:

resolution = ""

Page 13: Chiefconfetqa nalutin

Пользовательские атрибуты

customFields = issue['customFieldValues']

for customField in customFields:

if customField['customfieldId'] == 'customfield_10685':

for i in customField['values']:

fixPatches = fixPatches + i

Page 14: Chiefconfetqa nalutin

Списанное время

worklogs = soap.getWorklogs(auth,issue['key'])

for worklog in worklogs:

date = datetime.date( worklog['startDate'][0], worklog['startDate'][1], worklog['startDate'][2])

if date == reportDate:

author = soap.getUser(auth, worklog['author'])['fullname']

timeSpent = worklog['timeSpent']

comment = worklog['comment']

Page 15: Chiefconfetqa nalutin

JIRA: dashboards и SOAP API

Никита Налютин, Undev.ru

http://NikitaNalyutin.moikrug.ru