前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Java连接Jira,创建、修改、删除工单信息

Java连接Jira,创建、修改、删除工单信息

作者头像
说故事的五公子
发布2019-10-29 11:07:12
2.9K0
发布2019-10-29 11:07:12
举报

还不了解Jira是什么的同学可以看一下这篇文章:https://cloud.tencent.com/developer/article/1528965

本篇文章主要介绍如何使用Java操作Jira,包括获取连接,创建、修改、删除工单信息

1、获取Jira连接并执行请求:

代码语言:javascript
复制
/**
     * 执行shell脚本
     *
     * @param command
     * @return
     * @throws IOException
     */
    private static String executeShell(String command) throws IOException {
        StringBuffer result = new StringBuffer();
        Process process = null;
        InputStream is = null;
        BufferedReader br = null;
        String line = null;
        try {
            //windows平台下用cmd发生请求
            if (osname.indexOf("windows") >= 0) {
                process = new ProcessBuilder("cmd.exe", "/c", command).start();
                System.out.println("cmd.exe /c " + command); //安装Cygwin,使windows可以执行linux命令
            } else {
                //linux平台下执行请求
                process = new ProcessBuilder("/bin/sh", "-c", command).start();
                System.out.println("/bin/sh -c " + command);
            }

            is = process.getInputStream();
            br = new BufferedReader(new InputStreamReader(is, "UTF-8"));

            while ((line = br.readLine()) != null) {
                System.out.println(line);
                result.append(line);
            }

        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } finally {
            //关闭连接
            br.close();
            process.destroy();
            is.close();
        }

        //返回结果
        return result.toString();
    }

2、获取获得工单信息:

代码语言:javascript
复制
/**
     * 活动工单信息
     *
     * @param issueKey
     *            工单key
     * @return
     * @throws IOException
     */
    public static String getIssue(String issueKey) throws IOException {

        /**
         * jira的请求格式:
         * curl -u 用户名:密码 -X 请求类型 --data @文件的路径 -H "Content-Type: application/json" 请求路径
         * 
         * 官方示例:curl -u admin:admin -X POST --data @data.txt -H "Content-Type: application/json" http://localhost:8080/jira/rest/api/2/issue/
         *
         *  注意:--data后面的 @符合一定不能少
         */

        String command = "curl -D- -u " + user + ":" + pwd
                + " -X GET -H \"Content-Type: application/json\" \"" + uri
                + "/rest/api/2/issue/" + issueKey + "\"";

        String issueSt = executeShell(command);

        return issueSt;

    }

3、创建工单信息:

代码语言:javascript
复制
/**
     * 创建工单
     *
     * @param projectKey
     *            项目key
     * @param issueType
     *            工单类型 name
     * @param description
     *            工单描述
     * @param summary
     *            工单主题
    //     * @param assignee
     *            工单负责人
     *          
     * @return
     * @throws IOException
     */
    public static String createIssue(String projectKey, String issueType,String user,
                                     String description, String summary) throws IOException {

        String command="curl -D- -u " + user + ":" + pwd
                + " -X POST  --data @E:\\data.json -H \"Content-Type: application/json\" \"" + uri
                + "/rest/api/2/issue/\"";

        String issueSt = executeShell(command);

        if (!issueSt.contains("errorMessages")) {
            System.out.println("success");
        }else {
            System.out.println("error");
        }
        return issueSt;
    }

这里创建工单信息的文件我存放在了我电脑E盘根目录下面,名字为data.json

data.json的内容如下

代码语言:javascript
复制
{
    "fields": {
        "summary": "test008", 
        "issuetype": {
            "name": "Task"
        },
        "project": {
            "key": "MIN"
        },
        "description": "测试008",
        "assignee": {
            "name": "jwg"
        }
    }
}

  1. summary:工单主题
  2. issuetype:问题类型,问题类型是jira项目中存在的类型
  3. project:工单所属项目,工单所属项目是Jira中已经创建的项目
  4. description:工单描述,一些描述信息
  5. assignee:工单负责人,这个工单的负责人是谁

注意:data.json格式必须为json格式

4、更新工单信息:

代码语言:javascript
复制
/**
     * 更新工单
     *
     * @param issueKey
     *            工单key
     * @param map
     *            工单参数map,key为参数名称,value为参数值,参数值必须自带双引号 比如: map.put("assignee",
     *            "{\"name\":\"username\"}"); map.put("summary",
     *            "\"summary00002\"");
     * @return
     * @throws IOException
     */
    public static String editIssue(String issueKey, Map<String, String> map)
            throws IOException {

        StringBuffer fieldsB = new StringBuffer();
        for (Map.Entry<String, String> entry : map.entrySet()) {
            fieldsB.append("\"").append(entry.getKey()).append("\":")
                    .append(entry.getValue()).append(",");
        }
        String fields = fieldsB.toString();
        fields = fields.substring(0, fields.length() - 1);

        String command = "curl -D- -u " + user + ":" + pwd
                + " -X PUT   --data '{\"fields\": { " + fields
                + "}}' -H \"Content-Type: application/json\" \"" + uri
                + "/rest/api/2/issue/" + issueKey + "\"";

        String issueSt = executeShell(command);

        return issueSt;
    }

5、查询工单信息:

代码语言:javascript
复制
/**
     * 查询工单
     * @param jql
     * assignee=username
     * assignee=username&startAt=2&maxResults=2
     * assignee=username+order+by+duedate
     * project=projectKey+order+by+duedate&fields=id,key
     * @return
     * @throws IOException
     */
    public static String searchIssues(String jql) throws IOException{
        String command = "curl -D- -u " + user + ":" + pwd
                + " -X GET -H \"Content-Type: application/json\" \"" + uri
                + "/rest/api/2/search?jql=" + jql + "\"";

        String issueSt = executeShell(command);

        return issueSt;
    }

6、为工单增加注释:

代码语言:javascript
复制
/**
     * 为工单增加注释说明
     * @param issueKey 工单key

     *
     */
    public static String addComments(String issueKey,String comments) throws IOException{
        String command = "curl -D- -u " + user + ":" + pwd
                + " -X PUT   --data '{\"update\": { \"comment\": [ { \"add\": { \"body\":\""+comments+"\" } } ] }}' -H \"Content-Type: application/json\" \"" + uri
                + "/rest/api/2/issue/" + issueKey + "\"";

        String issueSt = executeShell(command);

        return issueSt;
    }

7、删除工单:

代码语言:javascript
复制
/**
     * 删除工单
     * @param issueKey 工单key
     * @return
     * @throws IOException
     */
    public static String deleteIssueByKey(String issueKey) throws IOException{
        String command = "curl -D- -u " + user + ":" + pwd
                + " -X DELETE -H \"Content-Type: application/json\" \"" + uri
                + "/rest/api/2/issue/" + issueKey + "\"";

        String issueSt = executeShell(command);

        return issueSt;
    }

8、上传附件:

代码语言:javascript
复制
/**
     * 上传附件
     * @param issueKey 工单key
     * @param filepath 文件路径
     * @return
     * @throws IOException
     */
    public static String addAttachment(String issueKey,String filepath) throws IOException{
        String command = "curl -D- -u " + user + ":" + pwd
                + " -X POST -H \"X-Atlassian-Token: nocheck\"  -F \"file=@"+filepath+"\" \"" + uri
                + "/rest/api/2/issue/" + issueKey + "/attachments\"";

        String issueSt = executeShell(command);

        return issueSt;
    }

项目的完整代码如下:

代码语言:javascript
复制
  1 import java.io.BufferedReader;
  2 import java.io.IOException;
  3 import java.io.InputStream;
  4 import java.io.InputStreamReader;
  5 import java.util.Map;
  6 
  7 /**
  8  * JIRA REST API 工具类
  9  * https://developer.atlassian.com/jiradev/jira-apis/jira-rest-apis/jira-rest-api-tutorials
 10  * https://docs.atlassian.com/jira/REST/7.0-SNAPSHOT/
 11  * @author 用代码征服天下
 12  *
 13  */
 14 public class JiraTest {
 15 
 16     public static void main(String[] args) throws IOException {
 17         // TODO Auto-generated method stub
 18         //获取工单信息,参数为问题名称
 19         JiraAPIUtil.getIssue("OAM-5402");
 20 
 21         JiraAPIUtil.createIssue("MIN", "Task", "jwg", "工单描述","工单主题");
 22 //
 23 //         Map<String,String> map = new HashMap<String,String>();
 24 //         map.put("assignee", "{\"name\":\"username\"}");
 25 //         map.put("summary", "\"summary00002\"");
 26 //         JiraAPIUtil.editIssue("MIN-1", map);
 27 
 28         JiraAPIUtil.searchIssues("assignee=username");
 29         System.out.println("*****************************");
 30         JiraAPIUtil.searchIssues("assignee=username+order+by+duedate");
 31         System.out.println("*****************************");
 32 
 33         JiraAPIUtil.addComments("MIN-1", "123456哈哈哈哈");
 34         JiraAPIUtil.deleteIssueByKey("NQCP-38");
 35         JiraAPIUtil.addAttachment("NQCP-39", "d://myfile01.json");  //linux路径:   /home/boss/myfile.txt
 36         JiraAPIUtil.addComments("createmeta", "123456哈哈哈哈");
 37     }
 38 
 39     static String uri = "http://localhost:8080"; //Jira服务器地址
 40     static String user = "jwg";//Jira用户名
 41     static String pwd = "jwg123456";//Jira密码
 42     static String osname = System.getProperty("os.name").toLowerCase(); //获取操作系统名称
 43 
 44     /**
 45      * 执行shell脚本
 46      *
 47      * @param command
 48      * @return
 49      * @throws IOException
 50      */
 51     private static String executeShell(String command) throws IOException {
 52         StringBuffer result = new StringBuffer();
 53         Process process = null;
 54         InputStream is = null;
 55         BufferedReader br = null;
 56         String line = null;
 57         try {
 58             //windows平台下用cmd发生请求
 59             if (osname.indexOf("windows") >= 0) {
 60                 process = new ProcessBuilder("cmd.exe", "/c", command).start();
 61                 System.out.println("cmd.exe /c " + command); //安装Cygwin,使windows可以执行linux命令
 62             } else {
 63                 //linux平台下执行请求
 64                 process = new ProcessBuilder("/bin/sh", "-c", command).start();
 65                 System.out.println("/bin/sh -c " + command);
 66             }
 67 
 68             is = process.getInputStream();
 69             br = new BufferedReader(new InputStreamReader(is, "UTF-8"));
 70 
 71             while ((line = br.readLine()) != null) {
 72                 System.out.println(line);
 73                 result.append(line);
 74             }
 75 
 76         } catch (Exception e) {
 77             // TODO Auto-generated catch block
 78             e.printStackTrace();
 79         } finally {
 80             //关闭连接
 81             br.close();
 82             process.destroy();
 83             is.close();
 84         }
 85 
 86         //返回结果
 87         return result.toString();
 88     }
 89 
 90     /**
 91      * 活动工单信息
 92      *
 93      * @param issueKey
 94      *            工单key
 95      * @return
 96      * @throws IOException
 97      */
 98     public static String getIssue(String issueKey) throws IOException {
 99 
100         /**
101          * jira的请求格式:
102          * curl -u 用户名:密码 -X 请求类型 --data @文件的路径 -H "Content-Type: application/json" 请求路径
103          *
104          * 官方示例:curl -u admin:admin -X POST --data @data.txt -H "Content-Type: application/json" http://localhost:8080/jira/rest/api/2/issue/
105          *
106          *  注意:--data后面的 @符合一定不能少
107          */
108 
109         String command = "curl -D- -u " + user + ":" + pwd
110                 + " -X GET -H \"Content-Type: application/json\" \"" + uri
111                 + "/rest/api/2/issue/" + issueKey + "\"";
112 
113         String issueSt = executeShell(command);
114 
115         return issueSt;
116 
117     }
118 
119     /**
120      * 创建工单
121      *
122      * @param projectKey
123      *            项目key
124      * @param issueType
125      *            工单类型 name
126      * @param description
127      *            工单描述
128      * @param summary
129      *            工单主题
130     //     * @param assignee
131      *            工单负责人
132      *            工单参数map,key为参数名称,value为参数值,参数值必须自带双引号 比如: map.put("assignee",
133      *            "{\"name\":\"username\"}"); map.put("summary",
134      *            "\"summary00002\"");
135      * @return
136      * @throws IOException
137      */
138     public static String createIssue(String projectKey, String issueType,String user,
139                                      String description, String summary) throws IOException {
140 
141         String command="curl -D- -u " + user + ":" + pwd
142                 + " -X POST  --data @E:\\data.json -H \"Content-Type: application/json\" \"" + uri
143                 + "/rest/api/2/issue/\"";
144 
145         String issueSt = executeShell(command);
146 
147         if (!issueSt.contains("errorMessages")) {
148             System.out.println("success");
149         }else {
150             System.out.println("error");
151         }
152         return issueSt;
153     }
154 
155 
156 
157 
158 
159 
160     /**
161      * 更新工单
162      *
163      * @param issueKey
164      *            工单key
165      * @param map
166      *            工单参数map,key为参数名称,value为参数值,参数值必须自带双引号 比如: map.put("assignee",
167      *            "{\"name\":\"username\"}"); map.put("summary",
168      *            "\"summary00002\"");
169      * @return
170      * @throws IOException
171      */
172     public static String editIssue(String issueKey, Map<String, String> map)
173             throws IOException {
174 
175         StringBuffer fieldsB = new StringBuffer();
176         for (Map.Entry<String, String> entry : map.entrySet()) {
177             fieldsB.append("\"").append(entry.getKey()).append("\":")
178                     .append(entry.getValue()).append(",");
179         }
180         String fields = fieldsB.toString();
181         fields = fields.substring(0, fields.length() - 1);
182 
183         String command = "curl -D- -u " + user + ":" + pwd
184                 + " -X PUT   --data '{\"fields\": { " + fields
185                 + "}}' -H \"Content-Type: application/json\" \"" + uri
186                 + "/rest/api/2/issue/" + issueKey + "\"";
187 
188         String issueSt = executeShell(command);
189 
190         return issueSt;
191     }
192 
193 
194 
195     /**
196      * 查询工单
197      * @param jql
198      * assignee=username
199      * assignee=username&startAt=2&maxResults=2
200      * assignee=username+order+by+duedate
201      * project=projectKey+order+by+duedate&fields=id,key
202      * @return
203      * @throws IOException
204      */
205     public static String searchIssues(String jql) throws IOException{
206         String command = "curl -D- -u " + user + ":" + pwd
207                 + " -X GET -H \"Content-Type: application/json\" \"" + uri
208                 + "/rest/api/2/search?jql=" + jql + "\"";
209 
210         String issueSt = executeShell(command);
211 
212         return issueSt;
213     }
214 
215 
216     /**
217      * 为工单增加注释说明
218      * @param issueKey 工单key
219 
220      *
221      */
222     public static String addComments(String issueKey,String comments) throws IOException{
223         String command = "curl -D- -u " + user + ":" + pwd
224                 + " -X PUT   --data '{\"update\": { \"comment\": [ { \"add\": { \"body\":\""+comments+"\" } } ] }}' -H \"Content-Type: application/json\" \"" + uri
225                 + "/rest/api/2/issue/" + issueKey + "\"";
226 
227         String issueSt = executeShell(command);
228 
229         return issueSt;
230     }
231 
232 
233     /**
234      * 删除工单
235      * @param issueKey 工单key
236      * @return
237      * @throws IOException
238      */
239     public static String deleteIssueByKey(String issueKey) throws IOException{
240         String command = "curl -D- -u " + user + ":" + pwd
241                 + " -X DELETE -H \"Content-Type: application/json\" \"" + uri
242                 + "/rest/api/2/issue/" + issueKey + "\"";
243 
244         String issueSt = executeShell(command);
245 
246         return issueSt;
247     }
248 
249 
250     /**
251      * 上传附件
252      * @param issueKey 工单key
253      * @param filepath 文件路径
254      * @return
255      * @throws IOException
256      */
257     public static String addAttachment(String issueKey,String filepath) throws IOException{
258         String command = "curl -D- -u " + user + ":" + pwd
259                 + " -X POST -H \"X-Atlassian-Token: nocheck\"  -F \"file=@"+filepath+"\" \"" + uri
260                 + "/rest/api/2/issue/" + issueKey + "/attachments\"";
261 
262         String issueSt = executeShell(command);
263 
264         return issueSt;
265     }
266 
267 }
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2019-10-28 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1、获取Jira连接并执行请求:
  • 2、获取获得工单信息:
  • 3、创建工单信息:
  • 注意:data.json格式必须为json格式
  • 4、更新工单信息:
  • 5、查询工单信息:
  • 6、为工单增加注释:
  • 7、删除工单:
  • 8、上传附件:
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档