(五)Jira Api对接:修改任务状态
- 2021 年 5 月 24 日
- 筆記
- Jira, Jira api, jira-workflow, 工具使用
项目迭代结束后我们需要把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", "//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", "//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类型。
更多文章请关注公众号