Каков самый простой способ извлечь даты начала и окончания спринта из базы данных JIRA?

Я пытаюсь извлечь дни начала и окончания моих спринтов из базы данных Jira. Казалось бы, это простая задача, но на самом деле (насколько я понял, по крайней мере) это не так.

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

Вот что я узнал:

Спринты не являются собственным выражением Jira, и плагин Greenhopper использует таблицу projectversion для представления спринтов.

Таблица projectversion содержит некоторую информацию о спринте, например название, к какому проекту он принадлежит и дату выпуска. Дату выпуска можно рассматривать как дату окончания спринта, но дата начала отсутствует.

Если вы запускаете спринты подряд, возможно, дату начала спринта можно установить на дату выпуска предыдущего спринта плюс один день? Но это действительно не очень хорошее решение.

Итак, я просмотрел модель данных Jira, и лучшая и единственная ссылка на дату начала спринта, которую я нашел, была в структуре свойств.

Вы можете определить свойства и присвоить им значения. В основной таблице этой структуры, таблице свойств, я нашел такие записи:

ID     ENTITY_NAME     ENTITY_ID     PROPERTY_KEY                          propertytype    
-----  --------------  ------------  ------------------------------------  ------------
 10288  GreenHopper     10010         CONFIGURATION                         6               
 10304  GreenHopper     10012         CONFIGURATION                         6               
 10312  GreenHopper     10013         CONFIGURATION                         6               
 10449  GreenHopper     10014         CONFIGURATION                         6   

Итак, GreenHopper добавил свойство с ключом, установленным на КОНФИГУРАЦИЯ. Поле etity_id ссылается на project.id, а свойство конфигурации — это конфигурация проекта. Для свойства property_type установлено значение 6, что говорит нам искать значение в таблице propertytext.

Значение, хранящееся в таблице propertytext, представляет собой строку XML, содержащую различную информацию о проекте, среди которых такие записи:

<entry>
  <string>BURNDOWN_START_DATE_10074</string>
  <long>1316988000000</long>
</entry> 

Вот оно. Лучший эквивалент, который я нашел для даты начала спринта. Скрыт в строке xml в таблице свойств.

Мой вопрос: действительно ли это единственный способ найти даты начала моего спринта?


person sondrewe    schedule 14.12.2011    source источник
comment
Почему вы должны использовать базу данных напрямую? Есть варианты показать представления ваших спринтов (в версиях JIRA)... И если вам нужны данные, я бы сначала попытался использовать API JIRA для получения информации.   -  person mliebelt    schedule 14.12.2011
comment
Я использую базу данных для извлечения информации из рабочего журнала, которую мне не удалось получить через веб-приложение Jira. Например, отчет о часах, отработанных каждым членом команды в день. Я изучу API Jira и посмотрю, что он предлагает.   -  person sondrewe    schedule 14.12.2011


Ответы (6)


Похоже, невозможно получить дату окончания и начала спринта через Jira SOAP/REST API.

Вы можете извлечь даты начала и окончания ваших спринтов, используя: com.pyxis.greenhopper.jira.configurations.ProjectConfiguration#getVersionStartDate com.pyxis.greenhopper.jira.configurations.ProjectConfiguration#getVersionEndDate

Чтобы использовать этот класс, вы можете написать подключаемый модуль Jira — Разработка с помощью SDK подключаемых модулей Atlassian

Другой вариант — написать модуль GreenHopper — Документация для разработчиков GreenHopper

person Daria Trainor    schedule 15.12.2011
comment
Как получить ссылку на объект версии? - person Joe Coder; 18.01.2013
comment
На самом деле вы можете получить дату начала и окончания спринта с помощью JIRA Agile REST API следующим образом: /rest/greenhopper/1.0/rapid/charts/sprintreport.json?rapidViewId=652&sprintId=577 и увидеть элемент спринта. Он также поставляется с завершенными задачами в спринте. - person mdoar; 24.12.2013

Я не рекомендую обращаться к базе данных JIRA напрямую, если этого можно избежать. Недокументированный API JIRA Agile REST, такой как rest/greenhopper/1.0/rapid/charts/sprintreport.json?rapidViewId=652&sprintId=577, где rapidViewId — это идентификатор доски, дает вам информацию о спринте. Этот и другие ресурсы REST можно увидеть в библиотеке jira-python по адресу http://jira-python.readthedocs.org/en/latest/

person mdoar    schedule 24.12.2013
comment
Формат дат: startDate: 07/ноябрь/13 15:40 endDate: 31/дек/13 15:40 - person mdoar; 24.12.2013

Самый простой способ найти дату начала и дату окончания спринта в Agile jira — нажать jiraschema.AO_60DB71_SPRINT таблицу. Это сохраняет start_date, end_date как большое целое число. Jira по некоторым причинам сохраняет эти форматы даты как тип данных int. Чтобы преобразовать тип данных int в date, вот запрос в MS Sql. При необходимости вы можете легко изменить его на другую базу данных.

###This query pulls start_date, end_date, completed_date of all non active sprints in MS SQL.###

select ID, Name SprintName
,START_DATE / 60 / 60 / 24 / 1000  + CAST('12/31/1969' as datetime)+1 StartDate
,END_DATE / 60 / 60 / 24 / 1000  + CAST('12/31/1969' as datetime)+1 EndDate
,COMPLETE_DATE / 60 / 60 / 24 / 1000  + CAST('12/31/1969' as datetime)+1 CompletedDate
FROM
 AO_60DB71_SPRINT as sprint
where COMPLETE_DATE is not null
person user3131786    schedule 24.12.2013
comment
Не могли бы вы объяснить, почему в конце каждого из них стоит +1, это для учета определенного часового пояса? Также это всегда показывает округление до дня. - person AndrewT; 27.08.2015

SELECT * FROM a0_60db71_sprint

Это вопрос по MySQL, а не по java.

Подключитесь к базе данных JIRA MySQL и найдите таблицу, соответствующую *_sprint

Поля в приведенной выше таблице:

  • Closed (boolean)
  • ID (key)
  • Start_Date (timestamp)
  • End_Date (timestamp)
  • Complete_Date (timestamp).
person Jordan Stefanelli    schedule 16.01.2013
comment
Вы делаете предположение, что MySQL является используемой базой данных и нарушает абстракцию Active Objects. - person Joe Coder; 18.01.2013

Недавно мне дали задание получить список спринтов с датами для конкретного проекта. Сначала мне нужно было найти идентификатор проекта из таблицы Project и идентификатор пользовательского поля для поля Sprint из таблиц customfield/customfieldvalue.

Вот результат

select 
    p.pname as "Project Name",
    s.NAME as "Sprint Name", 
    from_unixtime(s.START_DATE / 1000) as "Start Date", 
    from_unixtime(s.END_DATE / 1000) as "End Date",
    from_unixtime(s.COMPLETE_DATE / 1000 ) as "Complete Date"
from
    customfieldvalue as c, 
    jiraissue as i, 
    project as p, 
    AO_60DB71_SPRINT as s
where 
    p.id = <project ID> and p.id = i.project and
    c.issue = i.id and c.customfield = <customfield ID> and
    c.stringvalue = s.id
group by s.name 
;

Наш сервер mysql находится в другом часовом поясе, поэтому мне пришлось изменить время вывода.

...
    from_unixtime(s.START_DATE / 1000) - interval 1 hour as "Start Date", 
...

Может кому поможет

person ThePavolC    schedule 24.02.2014

Точно сказать не могу! почему JIRA не предоставляет очень простую конечную точку отдыха, чтобы просто выплевывать всю информацию о спринтах. Почему я должен иметь дело с board/boardID, чтобы найти спринты на этой доске, почему я должен перебирать все спринты.

Я пользователь с правами администратора, и я до сих пор выполняю часть спринта, который # дает мне, Sprint does not exist.

В любом случае, вот обходной сценарий.

#!/bin/bash

JIRA_URL="http://my_jira_server:8080"

users_sprint_limit_cmd_line_arg="$1"
# First parameter passed to the script is a NUMBER (for how many sprints a user wants to iterate over.
## I know!! it's a work-around for dealing with "Sprint does not exist" and
## becasue there's no shitty direct JIRA Rest API that exist, to query JIRA server, to spit all SPRINTS with info (start/end date) in just one call.    

## You can use API token (or base64 hash). I'm just going rouge here.
user="a_user_user_who_can_read_any_sprint_or_serviceuser_or_admin"
pass="D00M4u!"

## Set build number variable
b_no=${BUILD_NUMBER:="999999"}

## At the end, you'll have a Temp file will store all sprints info, Valid will contain only valid sprints.
temp_sprint_file="/tmp/all_sprints_startdates_${b_no}_temp.txt"
valid_sprint_file="/tmp/all_sprints_startdates_${b_no}.txt"


## Clean files
rm ${temp_sprint_file} ${valid_sprint_file} || true;

## Sprint counter
sprint_no=1

result="ToBeSet"
## Iterate over all sprints and find their start/stop dates.
## -- This is one-odd way to find sprint's start/end dates, but it works!!
## -- A user can pass a larger value in while condition "-lt value" via cmd line 1st param.
while [[ $sprint_no -lt ${users_sprint_limit_cmd_line_arg} ]];
do
    ## assumes 'jq' is installed. --OR run: sudo yum install jq
    ## --------------------------
    result="$(curl -s -u $user:$pass -X GET -H 'Content-Type: application/json' "${JIRA_URL}/rest/agile/1.0/sprint/${sprint_no}" | \
              jq | \
              egrep "name|startDate|endDate" | \
              cut -d'"' -f4 | \
              sed "s/T[0-9][0-9]:[0-9][0-9].*$//" | \
              tr '\012' ',' | \
              sed "s/,$//")";
    echo "${result}" >> ${temp_sprint_file}
    ((sprint_no++));
done

## Find valid sprints which have valid start/end dates.
grep "[A-Za-z],[0-9].*,[0-9]" ${temp_sprint_file} > ${valid_sprint_file};

echo -e "\n\n-- Sprints and Start/End Date file is available here: ${valid_sprint_file}\n\n"

Выполнение команды cat для этого сгенерированного файла данных спринта даст вам что-то вроде:

 1  Trumpy Trump,2019-01-09,2019-01-23
 2  Magical Modi,2019-01-18,2019-02-01

Где вы можете добавить строку в приведенный выше скрипт, чтобы использовать его как чистый файл CSV, имея строку заголовка, т. е. Sprint_Name, Sprint_Start_Date, Sprint_End_Date, я просто не делал этого, поскольку мой вариант использования заключался в том, чтобы использовать только этот файл как справочный файл.

Связанный пост о датах: BASH: Как найти нет. дней (учитывая только «сетевые/рабочие дни») между двумя датами (т. е. исключая выходные субботы и воскресенья)

person AKS    schedule 24.02.2020