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

     项目迭代结束后我们需要把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类型。

更多文章请关注公众号

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

测试步行人

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值