Jira平台数据自动化获取(一)--Jira接口请求

原创 2016年03月11日 21:55:54

月末总结中每月需要从Jira平台中统计各个项目的新增、关闭以及遗留bug数,人工去对各个项目进行条件筛选统计,耗时较长且容易出错,故计划做一个自动去筛选获取Jira平台各个项目每个月的数据

Jira请求

首先找到了Jira的API文档:https://docs.atlassian.com/jira/REST/latest/#api/2/search-search,其中的 api/2/search 接口为资源搜索API,包括POST和GET,使用JQL搜索问题且排序jql参数是一个完整的jql表达式,并包括ORDER BY子句。

试着使用http://jira.cvte.com/rest/api/2/search?jql=project = REM AND resolution = Unresolved ORDER BY priority DESC, updated DESC
在网页端获取到返回的值,结果如下:

{"expand":"schema,names","startAt":0,"maxResults":50,"total":159,"issues":
[{"expand":"operations,editmeta,changelog,transitions,renderedFields",
"id":"27451","self":"http://.../rest/api/2/issue/27451","key":"REM-191","fields":
{"fixVersions":[],"resolution":null,"customfield_10510":null,"customfield_10500":null,
"customfield_10501":null,"customfield_10502":null,"customfield_10503":null,"customfield_10504":null,
"customfield_10505":null,"customfield_10506":null,"customfield_10507":null,"customfield_10508":null,
"customfield_10509":null,"lastViewed":"2016-03-12T08:50:42.732+0800","customfield_10460":null,
"customfield_10461":null,"priority":
                   ......

在返回值中,只需要”total”:159 这个值,用JAVA去解析获取到的json格式的值:

import net.sf.json.JSONObject;
public class JsonDemo {
        public static void main(String[] args) {
        String str = "{\"expand\":\"schema,names\",\"startAt\":0,\"maxResults\":50,\"total\":159}";
        JSONObject jsonObject = JSONObject.fromObject(str);  
        int total = jsonObject.getInt("total");
        System.out.println("Get the total value :"+total);      
    }   
}

运行后得到的结果为:
Get the total value :137

但是上面的请求是由于该网页已经记录我的Jira账号的登录信息,若没的话,返回的值为:

{"errorMessages":["'project' 字段中没有  'REM'","字段 'resolution' 
不存在或这个字段不允许匿名用户查看。",
"无法对字段 'priority'进行排序"],"errors":{}}

故我们现在须先模拟登录Jira平台,先使用Fiddler清空浏览器缓存然后抓包看看登录请求
这里写图片描述
请求中Cookie包含的变量值:atlassian.xsrf.token、JSESSIONID、ca_uuid、pgv_pvi、pgv_si
尝试着使用Jmeter等工具模拟发包,返回值中无法获取Cookie中pgv_pvi、pgv_si这两个值。

现使用nodejs模拟Jira登录:
在使用前,先下载需要使用的module,如下面需要使用的’node-rest-client’和’mysql’模块,可以在http://npm.taobao.org/ 淘宝 NPM 镜像中下载,也可以直接cmd输入npm install node-rest-client 下载node-rest-client等模块

var Client = require('node-rest-client').Client;
client = new Client();
//提供用户凭据,将用于登录到JIRA
var loginArgs = {
    data: {
        "username": "******",
        "password": "******"      },
    headers: {
        "Content-Type": "application/json"
    }
};
 client.post("http://.../rest/auth/1/session", loginArgs, function (data, response) {
        if (response.statusCode == 200) {
            console.log('succesfully logged in, session:', data.session);
            var session = data.session;
            //获得会话信息,并将其存储在cookie的一个header
            var searchArgs = {
                headers: {
                    //设置会话信息的Cookie
                    cookie: session.name + '=' + session.value,
                    "Content-Type": "application/json"
                },
                data: { 
                xxxxxx 
                }
            };

将Cookie的值传给search请求,在data中提供添加JIRA搜索附加数据,加入JQL JIRA查询语句,可以进行JQL搜索。
在Data中添加:

jql: "project = REM AND resolution = Unresolved ORDER BY priority DESC, updated DESC"

传递头信息(包括cookie)和附加的查询JQL模块,请求返回搜索结果:

client.post("http://.../rest/api/2/search", searchArgs, function (searchResult, response) {
                console.log('status code:', response.statusCode);
                console.log('searchResult:', searchResult);
});

在查询的结果searchResult中,只需要获取total(即bug数)的值,故提取total的值:

var bugsnum = searchResult.total;

现需要封装查询函数,将bugsnum的值return给JiraRequest函数:

function JiraRequest(){
   client.post("http://.../rest/auth/1/session",loginArgs, function (data, response) {
        var bugsnum = searchResult.total;
        return bugsnum
   }
}

此时调用JiraRequest:

var requestResult = JiraRequest();

得到requestResult的值为undefined
这里需要用到一个回调函数:

function JiraRequest(callback) {    
    // 请求返回搜索结果,通过头信息,包括cookie
    client.post("http://.../rest/api/2/search", searchArgs, function (searchResult, response) {
       var num = searchResult.total;
       callback(num);
     });
}

此时调用JiraRequest函数

var callbackFn = function (num) {   
    console.log('num:'+num);
}
JiraRequest(callbackFn);

也可以这样调用

JiraRequest(function (num) {
    console.log(num);
});
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/lluozh2015/article/details/50859059

jira调用api实例

参考官方文档:https://ecosystem.atlassian.net/wiki/display/JRJC/Home 对于需要依赖的库:https://ecosystem.atlassian.n...
  • zyzn1425077119
  • zyzn1425077119
  • 2017-02-16 18:03:39
  • 2431

使用 JIRA API 获取 Issue

普通模式使用 Python 登录 Jira : import urllib2 import urllib def loginJira(): ''' if environment is...
  • No_Enemy
  • No_Enemy
  • 2016-02-22 13:44:29
  • 5057

JIRA REST API(一)

1.REST插件模块是用来干什么的? REST插件模块将服务和数据实体公开为REST API;REST模块基于JAX-RS,具体来说,它使用了Jersey。 REST API是通过URI路径来访问...
  • koukan3
  • koukan3
  • 2017-06-29 17:18:27
  • 1164

JIRA-RSET接口二次开发model

  • 2014年07月01日 15:22
  • 16KB
  • 下载

jira中api开放及Jira证书

首先查看jira的版本; 打开Jira,在线帮助-》关于Jira, 之后打开jira api开发文档 https://docs.atlassian.com/jira/REST/6.3.12/ 其...
  • zyzn1425077119
  • zyzn1425077119
  • 2017-02-16 14:36:30
  • 1124

java调用jira接口

http://www.cnblogs.com/starcrm/p/4837971.html 首先通过jira的wsdl生成相关的类 package jiraTEST; import java....
  • Aqu415
  • Aqu415
  • 2015-12-06 20:01:37
  • 3661

JIRA的外部请求接口REST的基本使用

JIRA是部分公司使用的缺陷管理工具,或者说是流程管理工具,因为也是支持其他流程管理和定制的。且不管它好与不好,主要是在于用的公司是否能用好它的功能。个人觉得jira好的方面就是较大程度的支持扩展,比...
  • five3
  • five3
  • 2012-01-06 16:06:55
  • 16087

Jira使用手册

Jira使用手册 1    概述 跟踪并管理在项目开发和维护过程中出现的问题(如:缺陷、新特性、任务、改进等)是项目管理很重要的任务,但是很少有团队能做的很好。 JIRA作为一个专业的问题跟踪系统可以...
  • knighttools
  • knighttools
  • 2016-08-05 14:08:39
  • 14489

可方便扩展的JIRA Rest Web API的封装调用

JIRA是一个缺陷跟踪管理系统,被广泛应用于缺陷跟踪、客户服务、需求收集、流程审批、任务跟踪、项目跟踪和敏捷管理等工作领域,当我们需要把第三方业务系统集成进来时,可以调用他的API。 JIRA本身的...
  • starcrm
  • starcrm
  • 2016-09-18 17:38:22
  • 1228

JIRA 一些学习资料

安装使用什么的就不用说了,用过RTC,clearcase的人对这些基本概念都应该熟悉了,个人觉得JIRA和IBM Rational team concern 的项目管理和追踪这一块非常类似。所以这方面...
  • carolzhang8406
  • carolzhang8406
  • 2013-12-06 14:08:39
  • 7187
收藏助手
不良信息举报
您举报文章:Jira平台数据自动化获取(一)--Jira接口请求
举报原因:
原因补充:

(最多只允许输入30个字)