This Python script fetches information of Jira issues and returns an Org-mode representation of those issues in Org-mode format. This Org-mode format is highly specific for my own purpose but you are able to modify this structure to meet your requirements. Therefore, this script works as a blueprint or template for you.
You can use one to many Jira issue numbers (for stories) as command line parameter. If you use Jira issues that are Epics, all corresponding stories are retrieved as well.
- Author: Karl Voit
- License: GPLv3 or higher
- Coding was started in May 2016
- Install Python version 2.x
- Install Python Jira library via
pip install jira
or similar - Invoke the script via
python ./jira2org-story.py
- Generate the file
jiraconfig.py
- similar to the template from the previous script output
- in the same directory as the other Python script
- Re-start the script via
python ./jira2org-story.py 1234
and it should give you a similar output as stated below
python ./jira2org-story.py --help
usage: jira2org-story.py [-h] [--version] IPD [IPD ...] This tool retrieves a Jira issue and returns an Org-mode representation according to the system of Karl Voit. The output is highly specific for my personal usage. If you want to have a similar functionality, you have to adapt it to your needs. This would require at least a search&replace of "IPD" with the Jira project ID of your choice, all Jira URLs, and the custom org-mode link "ipd:1234". positional arguments: IPD One or many IPD numbers of stories or epics (without "IPD-" prefix) optional arguments: -h, --help show this help message and exit --version show program's version number and exit autor: Karl Voit <tools@Karl-Voit.at> license: GPL v3 or any later version URL: https://github.com/novoid/jira2org-story.py/ bugreports: via GitHub version: Time-stamp: <2016-05-13 14:00:47 karl.voit>
I work as a Product Owner in an agile Scrum process. To simplify my digial life, I use Org-mode for almost everything there is.
For managing my scrum stories, I was using an Org-mode representation long before I extracted things from Jira via scripts. I did not want to change how I am using Org-mode for Jira stories.
This is why I do not use ready-to-use projects that mirror or synchronize Jira with Org-mode:
Following headings are an example output when I call my script with the parameter “1234” (as of 2016-05-14).
Usually, I do use babel to execute the script:
#+BEGIN_SRC sh :results output raw :dir c:/Users/karl.voit/src/jira2org-story.py/ c:/Users/karl.voit/src/jira2org-story.py/jira2org-story.py 1234 #+END_SRC
Some remarks:
- Please note that I make use of task dependencies using TRIGGER and BLOCKER properties according to org-depend.el.
- I did create a customized link so that “IPD:1234” links to its Jira representative “https://product.infonova.at/jira/browse/IPD-1234”.
- Usually, I manually do search&replace “i1234” with a human-readable short version of the story title.
- You might wonder about the status “NEXT”. I am using “TODO” to define a task which will be of interest in future (but not now) and “NEXT” for a task that can be done now.
This structure is in constant change as I add and remove things or modify my Org-mode-related workflows.
*** TODO [[IPD:1234]] This Is The Title Of The Story [0/7] :US_i1234: :PROPERTIES: :CREATED: [2016-05-14 Sat 19:14] :ID: 2016-05-14-Story-i1234 :END: | [[IPD:1234][1234]] | This Is The Title Of The Story | Joe.Assignee | **** STARTED create Jira [[IPD:1234]] :PROPERTIES: :CREATED: [2016-05-14 Sat 19:14] :ID: 2016-05-14-i1234-create-jira-ipd :BLOCKER: :TRIGGER: 2016-05-14-i1234-define-champ(NEXT) 2016-05-14-i1234-estimation(NEXT) :END: - fill out: - [X] set reporter - [ ] set level red - [ ] fixVersion **** NEXT create Confluence page with template SCHEDULED: <2016-05-14> :PROPERTIES: :CREATED: [2016-05-14 Sat 19:14] :ID: 2016-05-14-i1234-create-confluence-page :BLOCKER: :TRIGGER: 2016-05-14-i1234-write-acceptance-criteria(NEXT) :END: - fill out: - [ ] add Jira-Link [[IPD:1234]] - [ ] PO - [ ] Title - [ ] Business Value - [ ] add Confluence-short-URL to story table above **** TODO write Acceptance Criteria, Docu, Perms :PROPERTIES: :CREATED: [2016-05-14 Sat 19:14] :ID: 2016-05-14-i1234-write-acceptance-criteria :BLOCKER: 2016-05-14-i1234-create-confluence-page :TRIGGER: 2016-05-14-i1234-confidence-green(NEXT) 2016-05-14-i1234-hand-over-team(NEXT) :END: **** TODO add Champ to Confluence and Jira :refinement: :PROPERTIES: :CATEGORY: refinement :CREATED: [2016-05-14 Sat 19:14] :ID: 2016-05-14-i1234-define-champ :BLOCKER: :END: **** TODO get Estimation on [[IPD:1234]] :refinement: :PROPERTIES: :CREATED: [2016-05-14 Sat 19:14] :CATEGORY: refinement :ID: 2016-05-14-i1234-estimation :BLOCKER: 2016-05-14-i1234-create-jira-ipd :TRIGGER: :END: - Estimation: **** TODO get confidence-level green on [[IPD:1234]] :refinement: :PROPERTIES: :CATEGORY: refinement :CREATED: [2016-05-14 Sat 19:14] :ID: 2016-05-14-i1234-confidence-green :BLOCKER: 2016-05-14-i1234-write-acceptance-criteria 2016-05-14-i1234-estimation :TRIGGER: :END: **** TODO hand over to team :PROPERTIES: :CREATED: [2016-05-14 Sat 19:14] :BLOCKER: 2016-05-14-i1234-write-acceptance-criteria 2016-05-14-i1234-estimation :ID: 2016-05-14-i1234-hand-over-team :TRIGGER: 2016-05-14-i1234-accept(WAITING) 2016-05-14-Story-i1234(TEAM) :END: **** acceptance + finish US :PROPERTIES: :CREATED: [2016-05-14 Sat 19:14] :ID: 2016-05-14-i1234-accept :BLOCKER: 2016-05-14-i1234-hand-over-team :TRIGGER: 2016-05-14-Story-i1234(DONE) :END: