Jira Api对接教程(五):如何修改任务状态

     项目迭代结束后我们需要把sprint下面的story、task任务状态修改到结束状态,如果手动修改会花费不少时间,本文就介绍如何通过jira api自动修改任务状态,提高工作效率。


一、查看任务工作流

1、想要查看任务工作流首先需要管理员权限,工作流路径:设置--问题--工作流,如下图:

(五)Jira Api对接:修改任务状态_spring

2、点击查看或者编辑,可以通过图形或者文本的方式查看。如下图,我们主要使用文本的方式,这种方式比较容易知道每个工作流动作的ID、状态名称以及与上下节点的关系,这些信息在后面要使用到

(五)Jira Api对接:修改任务状态_数据_02

(五)Jira Api对接:修改任务状态_jira_03

二、修改任务代码

1、首先我们来看下jira上任务的体现,开发自测通过后需要开发把任务状态修改到待提测状态,如下图,后面的状态修改有自动化修改。

(五)Jira Api对接:修改任务状态_数据_04

2、自动化修改后jira体现,如下图。

(五)Jira Api对接:修改任务状态_数据_05

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;
    }

  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.
  • 28.
  • 29.
  • 30.
  • 31.
  • 32.
  • 33.
  • 34.
  • 35.
  • 36.
  • 37.
  • 38.
  • 39.
  • 40.
  • 41.
  • 42.
  • 43.
  • 44.
  • 45.
  • 46.
  • 47.
  • 48.
  • 49.
  • 50.
  • 51.
  • 52.
  • 53.
  • 54.
  • 55.
  • 56.
  • 57.
  • 58.
  • 59.
  • 60.
  • 61.
  • 62.
  • 63.
  • 64.
  • 65.
  • 66.
  • 67.
  • 68.
  • 69.
  • 70.
  • 71.
  • 72.
  • 73.
  • 74.
  • 75.
  • 76.
  • 77.
  • 78.
  • 79.
  • 80.
  • 81.
  • 82.
  • 83.
  • 84.
  • 85.
  • 86.
  • 87.
  • 88.
  • 89.
  • 90.
  • 91.
  • 92.
  • 93.
  • 94.
  • 95.
  • 96.
  • 97.
  • 98.
  • 99.
  • 100.
  • 101.
  • 102.
  • 103.
  • 104.
  • 105.
  • 106.
  • 107.
  • 108.
  • 109.
  • 110.
  • 111.
  • 112.
  • 113.
  • 114.
  • 115.
  • 116.

本文只是介绍如何修改子任务的状态,当然也可以修改story、bug等状态,步骤都是一样的,只是需要修改流程动作ID和issue类型。

(五)Jira Api对接:修改任务状态_json_06

QR Code
微信扫一扫,欢迎咨询~

联系我们
武汉格发信息技术有限公司
湖北省武汉市经开区科技园西路6号103孵化器
电话:155-2731-8020 座机:027-59821821
邮件:tanzw@gofarlic.com
Copyright © 2023 Gofarsoft Co.,Ltd. 保留所有权利
遇到许可问题?该如何解决!?
评估许可证实际采购量? 
不清楚软件许可证使用数据? 
收到软件厂商律师函!?  
想要少购买点许可证,节省费用? 
收到软件厂商侵权通告!?  
有正版license,但许可证不够用,需要新购? 
联系方式 155-2731-8020
预留信息,一起解决您的问题
* 姓名:
* 手机:

* 公司名称:

姓名不为空

手机不正确

公司不为空