2017-07-18 110 views
0

我已經多次看到此問題,但沒有足夠的答案。Jira - 如何通過REST API獲取問題更改日誌 - 但所有問題,而不是單個問題

我們試圖將所有JIRA數據轉儲到我們的數據倉庫/ BI系統中。或者至少,有趣的部分。

你可以做的一件事是跟蹤狀態時間,週期時間,領頭時間直接與領域持續時間。通過JIRA的直接SQL數據庫,這非常簡單。表changeItem和changeGroup。

當然,REST JSON API對數據庫的性能影響較小。

但是......在獲取所有問題更改歷史記錄的其餘API中似乎沒有相同的功能。是的,您可以通過API調用直接獲取一個問題的更改日誌。如果您有100k個問題,您是否期望進行10萬次API調用,迭代問題ID?聽起來像瘋了一樣。

是否有可能通過搜索API來擴展更新日誌,搜索API會聚集所有問題數據?我沒有看到它。我在這裏可能找到什麼?或者我們必須堅持SQL路線嗎?

回答

2

我想你問的問題與以前幾乎相同:How can I fetch (via GET) all JIRA issues? Do I go to the Search node?,但在獲取更新日誌數據方面也很有趣。

是的,你必須批量執行,多次請求JIRA API。 這裏是小bash腳本,它可以幫助你做到這一點:

#!/usr/bin/env bash 

LDAP_USERNAME='<username>' 
LDAP_PASSWORD='<password>' 

JIRA_URL='https://jira.example.com/rest/api/2/search?' 
JQL_QUERY='project=FOOBAR' 

START_AT=0 
MAX_RESULTS=50 

TOTAL=$(curl --silent -u "${LDAP_USERNAME}:${LDAP_PASSWORD}" -X GET -H "Content-Type: application/json" "${JIRA_URL}maxResults=0&jql=${JQL_QUERY}" | jq '.total') 
echo "Query would export ${TOTAL} issues." 


while [ ${START_AT} -lt ${TOTAL} ]; do 
    echo "Exporting from ${START_AT} to $((START_AT + MAX_RESULTS))" 
    curl --silent -u "${LDAP_USERNAME}:${LDAP_PASSWORD}" -X GET -H "Content-Type: application/json" "${JIRA_URL}maxResults=${MAX_RESULTS}&startAt=${START_AT}&jql=${JQL_QUERY}& expand=changelog" | jq -c '.issues[]' >> issues.json 

    START_AT=$((START_AT + MAX_RESULTS)) 
done 

請注意:擴大參數,該參數將所有更改日誌的JSON轉儲爲好。或者,您可以使用issue dumper python解決方案:實施回調以將數據存儲到db並完成。

+0

嗯......我試着在搜索API端點上展開= changelog,然後我甚至問過這個問題 - 我沒有注意到任何額外的信息/結果。它當然不會在任何類型的Jira API文檔中列爲此特定端點的擴展選項。我不認爲有可能通過這個端點發布更新日誌。也許我必須仔細檢查我使用的是什麼邏輯。編輯:我想我沒有仔細檢查我的查詢結果。更改日誌確實在搜索端點上可用,expand = changelog。希望這個非常有用的信息有更好的記錄 – user45867

+0

我沒有問題一次獲取1000張門票。這是標準文檔中時間方法的'1票',它需要在網址中顯示非常麻煩的issue_id。 – user45867