zoukankan      html  css  js  c++  java
  • 如何用 JIRA REST API 创建 Issue

    简介

    最近需要把一个Excel里的issues list全部到JIRA上create 一遍, 总不能手动创建百十来个issues吧, 本文讲述一下如果调用JIRA提供的Rest API 来自动创建issues.

    下面是官网的一个例子,用curl 来创建的。

    Request
    curl -D- -u fred:fred -X POST --data {see below} -H "Content-Type: application/json" http://localhost:8090/rest/api/2/issue/
    Data
    {
        "fields": {
           "project":
           { 
              "key": "TEST"
           },
           "summary": "REST ye merry gentlemen.",
           "description": "Creating of an issue using project keys and issue type names using the REST API",
           "issuetype": {
              "name": "Bug"
           }
       }
    }
    Response
    {
       "id":"39000",
       "key":"TEST-101",
        "self":"http://localhost:8090/rest/api/2/issue/39000"
    }

    下面我用Apache Http Client 写的Java 代码

        public static String executePostRequest(String url, String postBody) {
            ResponseHandler<String> handler = new BasicResponseHandler();
            
            HttpPost httpPost = new HttpPost(url);
            httpPost.setHeader("Authorization", basic_auth);
            httpPost.setHeader("Content-type", "application/json");
            StringEntity entity = new StringEntity(postBody, "UTF-8");
            entity.setContentType("application/json;charset=UTF-8");
            httpPost.setEntity(entity);
            String responseBody = null;
            HttpResponse response = null;
            try
            {
                response = httpclient.execute(httpPost);
                responseBody = handler.handleResponse(response);
            } catch (IOException e)
            {
                // TODO Auto-generated catch block
                System.out.println(e.getMessage() + " status code: " + response.getStatusLine().getStatusCode());
            }
            String ticketNum = null;
            try
            {
                if (responseBody != null)
                {
                    ticketNum = new JSONObject(responseBody).getString("key");
                }
            } catch (JSONException e)
            {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            System.out.println("Ticket Number: " + ticketNum);
            return ticketNum;
        }

    ##转载注明出处:http://www.cnblogs.com/wade-xu/p/6096902.html 

    读取Excel的值 然后遍历create issue

      private static final String BASE_URL = "http://jira.test.com/rest/api/2/issue";
        private static String basic_auth = "Basic ";
        private static CloseableHttpClient httpclient = null;
    
    public static void main(String[] args)
        {
            String username = "wadexu";
            String password = "xxxxx";
            httpclient = HttpClients.createDefault();
            
            basic_auth += Base64Util.encodeBase64String(username + ":" + password);
            System.out.println("basic_auth: " + basic_auth);
            
            List<List<String>> recordList = ExcelReader.readFromExcel("C:/Users/wadexu/Desktop/issues.xlsx");
    
            for(int i = 1; i < recordList.size(); i++) {
                createIssueViaSheet(recordList.get(i));
            }
        }
    
    public static void createIssueViaSheet(List<String> list) {
            
            String postBody = "{"fields": { "project": { "key": "" + list.get(7) + "" }, "
                        + ""summary": "This attribute" + list.get(0) + "has a serialization issue", "
                        + ""description": "Please fix this issue. ", "
                        + ""issuetype": {"name": "Defect"}, "
                        + ""versions": [{"name": "1234"}], "components": "
                        + "[{"name": "" + list.get(6) + ""}], "customfield_10030": "
                        + "[{"value": "Internal Issue"}],  "customfield_10001": {"value": "New"},  "customfield_10002": "
                        + "{"value": "3-Medium"}}}";
                
                String issueNumber = createIssue(postBody);
                
                if (issueNumber != null && !"".equalsIgnoreCase(issueNumber)) {
                    addWatchers(issueNumber, ""wadexu"");
                }
        }
        
        public static String createIssue(String postBody) {
            return executePostRequest(BASE_URL, postBody);
        }

    add watchers to JIRA issue is also a rest API provided by JIRA

        public static void addWatchers(String issueNumber, String postBody) {
            String url = BASE_URL + "/" + issueNumber + "/watchers";
            executePostRequest(url, postBody);
        }

    My post body template as below:

    {
        "fields": {
           "project": {"key": "ABC"},
           "summary": "The attribute has a serialization issue",
           "description": "Please fix this issue.",
           "issuetype": {"name": "Defect"},
           "versions": [{"name": "1234"}],
           "components": [{"name": "ABC Service"}],
           "customfield_11030": [{"value": "Internal Issue"}],
           "customfield_10020": {"value": "New"},
           "customfield_10002": {"value": "3-Medium"},
           "customfield_11082": [{"value": "QA Landscape"}]
           
       }
    }

    这些fields 要注意,有得是多选, 有得单选, 加不加[] 很容易出错导致400 bad request

    ##转载注明出处:http://www.cnblogs.com/wade-xu/p/6096902.html 

    参考文档:

    https://developer.atlassian.com/jiradev/jira-apis/jira-rest-apis

    感谢阅读,如果您觉得本文的内容对您的学习有所帮助,您可以点击右下方的推荐按钮,您的鼓励是我创作的动力。

  • 相关阅读:
    VS2015新建项目无法选择framework 4.6.2
    AngularGauge 属性解析(转载)
    JAVA基础总结2
    JAVA基础总结
    今天做项目用到框架,关于angual,然后自己整理了一番,自己上网也看了看。
    晚上闲来无事,整理一下字符串和数组常用的方法,分享给大家。
    今天写项目时,突然发现canvas的一些公式不记得了,所以整理了一番,分享给大家。
    在公司没事,随手写写
    今天做项目时,用到了好多关于js的知识点,有的忘记了,然后晚上回来自己整理一番,明天继续整理。哈哈,分享给大家。
    DOM相关知识点以及原型
  • 原文地址:https://www.cnblogs.com/wade-xu/p/6096902.html
Copyright © 2011-2022 走看看