項目迭代結束后我們需要把sprint下面的story、task任務狀態修改到結束狀態,如果手動修改會花費不少時間,本文就介紹如何通過jira api自動修改任務狀態,提高工作效率。
一、查看任務工作流
1、想要查看任務工作流首先需要管理員權限,工作流路徑:設置--問題--工作流,如下圖:
2、點擊查看或者編輯,可以通過圖形或者文本的方式查看。如下圖,我們主要使用文本的方式,這種方式比較容易知道每個工作流動作的ID、狀態名稱以及與上下節點的關系,這些信息在后面要使用到
二、修改任務代碼
1、首先我們來看下jira上任務的體現,開發自測通過后需要開發把任務狀態修改到待提測狀態,如下圖,后面的狀態修改有自動化修改。
2、自動化修改后jira體現,如下圖。
3、代碼如下
public static void main(String[] args) { //模擬調用 updateSpringTaskStatus("2609"); } /** * 修改spring下的所有task和story到完成狀態 * * @param springId */ public static void updateSpringTaskStatus(String springId) { //獲取spring下面任務 List<String> subTaskKeys = getSubTaskKey(springId); //循環修改sub task,狀態101=提測預演通過 81=測試通過 41=任務驗收完成。這個值就是工作流動作ID List<Integer> status = Arrays.asList(101, 81, 41); for (String issueKey : subTaskKeys) { for (int i = 0; i < status.size(); i++) { //請求內容 String requestBody = "{\"transition\": {\n \"id\": \"" + status.get(i) + "\"\n }\n}"; //調用接口修改任務狀態 httpClient("post", "http://you jira address:port/rest/api/2/issue/" + issueKey + "/transitions", requestBody); } } } /** * 獲取sprint下的subTask * * @return */ public static List<String> getSubTaskKey(String sprintId) { //定義 List<String> issueKeys = new ArrayList<>(); //獲取第一頁數據, JSONObject jsonObject = getIssueKey(0, sprintId); if (jsonObject != null) { //解析出第一頁任務 issueKeys = getSubTaskKey(jsonObject); //sprint下issue總數 int total = jsonObject.getInt("total"); logger.info("spring上共有story" + total + "個"); if (total > 150) { //默認一頁150條數據,總數大於150計算頁數,並循環調用獲取數據 int page = total / 150; if (total % 150 > 0) { page = page + 1; } logger.info("spring上共有story" + page + "頁"); for (int pageIndex = 1; pageIndex < page; pageIndex++) { //調用每頁數據 JSONObject object = getIssueKey(pageIndex * 150, sprintId); if (object != null) { issueKeys.addAll(getSubTaskKey(object)); } } } } return issueKeys; } /** * 解析出任務key * * @param jsonObject * @return */ private static List<String> getSubTaskKey(JSONObject jsonObject) { List<String> issueKeys = new ArrayList<>(); //獲取issues JSONArray issueArray = jsonObject.getJSONArray("issues"); for (int i = 0; i < issueArray.size(); i++) { //獲取fields JSONObject issueObject = issueArray.getJSONObject(i); JSONObject fields = issueObject.getJSONObject("fields"); //獲取issuetype JSONObject issuetype = fields.getJSONObject("issuetype"); if ("Story".equals(issuetype.getString("name"))) { //如果是story,則獲取story下面的subtask任務 JSONArray subtasks = fields.getJSONArray("subtasks"); if (subtasks != null && subtasks.size() > 0) { for (int taskid = 0; taskid < subtasks.size(); taskid++) { JSONObject subtask = subtasks.getJSONObject(taskid); //獲取任務字段 JSONObject taskFields = subtask.getJSONObject("fields"); //獲取任務狀態 JSONObject status = taskFields.getJSONObject("status"); //如果是待提測、任務測試、任務驗收狀態則返回 if ("待提測".equals(status.getString("name")) || "任務測試".equals(status.getString("name")) || "任務驗收".equals(status.getString("name"))) { issueKeys.add(subtask.getString("key")); } } } } } return issueKeys; } /** * 獲取spring下的issue * * @param startAt * @param springId * @return */ private static JSONObject getIssueKey(int startAt, String springId) { HttpClientResponse issueResponse = httpClient("get", "http://you jira address:port/rest/ agile/1.0/sprint/"+ springId + "/issue?maxResults=150&startAt=" + startAt, ""); if (issueResponse != null && "200".equals(issueResponse.getStateCode()) && issueResponse.getResponseBody() != null) { JSONObject jsonObject = JSONObject.fromObject(issueResponse.getResponseBody().toString()); return jsonObject; } return null; }
本文只是介紹如何修改子任務的狀態,當然也可以修改story、bug等狀態,步驟都是一樣的,只是需要修改流程動作ID和issue類型。
更多文章請關注公眾號