简介
最近需要把一个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
感谢阅读,如果您觉得本文的内容对您的学习有所帮助,您可以点击右下方的推荐按钮,您的鼓励是我创作的动力。