前言:“JIRA是一款優秀的問題跟蹤管理軟件工具,可以對各種類型的問題進行跟蹤管理,包括缺陷、任務、子任務、需求、sprint等。公司為了提高測試效率都會測試平台化,那么就會出現跨平台使用jira數據的問題。最近一段時間我們就來討論下如何通過jira api達到我們的目的”
想要獲取到jira上的數據,首先我們需要知道是那個project、project下的那個board以及那一個sprint。本文就介紹如何獲取project、board和sprint.
jira上project一般都會比較多,如下圖,我們需要知道每個project的key或者ID,這是操作project api的基礎。
public static JSONArray getJiraProjects() { //httpClient 自己封裝的http接口調用 HttpClientResponse clientResponse = httpClient("get", "http://you jira address:port/rest/api/2/project", ""); if (clientResponse != null) { logger.info("獲取jira上project成功"); //已json數組的方式返回 return JSONArray.fromObject(clientResponse.getResponseBody()); } return null; } //url 可使用參數如下expand擴充字段、recent返回的個數、properties返回的屬性 //http://jira.timevale.cn:8081/rest/api/2/project?expand=projectKeys,description,url,lead&recent=2&properties=key,id
//返回的數據結構如下,其中id和key會在后面的api中使用,需要保存 [ { "expand": "description,lead,url,projectKeys", "self": "http://you jira address:port/rest/api/2/project/12345", "id": "12345",//后續需要使用 "key": "AI",//后續需要使用 "name": "AI項目組", "avatarUrls": { "48x48": "http://you jira address:port/secure/projectavatar?avatarId=10324", "24x24": "http://you jira address:port/secure/projectavatar?size=small&avatarId=10324", "16x16": "http://you jira address:port/secure/projectavatar?size=xsmall&avatarId=10324", "32x32": "http://you jira address:port/secure/projectavatar?size=medium&avatarId=10324" }, "projectTypeKey": "software" } ]
有時候一個project下面可能存在多個board,如下圖,那么我們就需要知道具體是那個board.
//入參projectKey是步驟一中返回的id或者key public static String getBoardId(String projectKey) { String boarId = ""; HttpClientResponse boardResponse = httpClient("get", "http://you jira address:port/rest/agile/1.0/board?projectKeyOrId=" + projectKey, ""); if (boardResponse != null && "200".equals(boardResponse.getStateCode()) && boardResponse.getResponseBody() != null) { JSONObject jsonObject = JSONObject.fromObject(boardResponse.getResponseBody().toString()); //獲取項目看板數組 JSONArray boardArray = jsonObject.getJSONArray("values"); if (boardArray != null && boardArray.size() > 0) { for (int i = 0; i < boardArray.size(); i++) { //默認使用項目名稱+ board作為項目看板 JSONObject object = boardArray.getJSONObject(i); if ((projectKey + " board").equals(object.getString("name")) || (projectKey + " Board").equals(object.getString("name"))) { //返回看板ID boarId = object.getString("id"); } } //沒有滿足要求的,設置第一個 if (StringUtils.isBlank(boarId)) { boarId = boardArray.getJSONObject(0).getString("id"); } } } return boarId; } //URL 中可使用參數startAt表示開始的位置、maxResults表示返回的數量 //http://you jira address:port/rest/agile/1.0/board?projectKeyOrId={projectKeyOrId}&startAt=1&maxResults=1
//返回結果如下,其中的id在獲取sprint時需要使用,需要保存 { "maxResults": 50, "startAt": 0, "isLast": true, "values": [ { "id": num1,//后續需要使用 "self": "http://you jira address:port/rest/agile/1.0/board/num1", "name": "測試", "type": "kanban" }, { "id": num2, "self": "http://you jira address:port/rest/agile/1.0/board/num2", "name": "醫簽寶", "type": "scrum" } ] }
項目的一個迭代對應到jira一般就是一個sprint,如下圖,獲取到sprint id就可以獲取到sprint關聯的需求、任務、缺陷等
根據board id 獲取sprint代碼如下
//入參boardId就是第二步中獲取的id public static List<TmsJiraSpringModel> getSpring(String boardId) { List<TmsJiraSpringModel> result = new ArrayList<>(); HttpClientResponse boardResponse = httpClient("get", "http://you jira address:port/rest/agile/1.0/board/" + boardId + "/sprint?state=future,active", ""); if (boardResponse != null && "200".equals(boardResponse.getStateCode()) && boardResponse.getResponseBody() != null) { JSONObject jsonObject = JSONObject.fromObject(boardResponse.getResponseBody().toString()); //獲取Spring JSONArray boardArray = jsonObject.getJSONArray("values"); if (boardArray != null && boardArray.size() > 0) { for (int i = 0; i < boardArray.size(); i++) { //自己封裝的對象 TmsJiraSpringModel springModel = new TmsJiraSpringModel(); JSONObject object = boardArray.getJSONObject(i); if (object != null) { springModel.setSpringId(object.getString("id")); springModel.setSpringName(object.getString("name")); result.add(springModel); } } } } return result; } //url 可使用參數startAt表示開始的位置、maxResults表示返回的數量、state表示sprint的狀態 //http://you jira address:port/rest/agile/1.0/board/{boardId}/sprint?state=future,active&startAt=1&maxResults=1
//返回結果如下, 其中id為sprint id后面會使用 { "maxResults": 2, "startAt": 1, "isLast": false, "values": [ { "id": num1,//后續需要使用 "self": "http://you jira address:port/rest/agile/1.0/sprint/num1", "state": "active", "name": "【智能人事】一期項目", "startDate": "2020-12-07T14:10:58.582+08:00", "endDate": "2021-01-15T02:10:00.000+08:00", "originBoardId": xxx }, { "id": num2, "self": "http://you jira address:port/rest/agile/1.0/sprint/num2", "state": "active", "name": "企業合同權限迭代", "startDate": "2020-12-16T10:11:24.631+08:00", "endDate": "2020-12-29T10:11:00.000+08:00", "originBoardId": xxx } ] }
jira api地址:
1、https://developer.atlassian.com/cloud/jira/platform/rest/v2/intro/#about
2、https://developer.atlassian.com/cloud/jira/software/rest/intro/#introduction
更多文章請關注公眾號