項目迭代結束后我們需要把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類型。
更多文章請關注公眾號






