Java连接Jira,创建、修改、删除工单信息
还不了解Jira是什么的同学可以看一下这篇文章:https://www.cnblogs.com/wgblog-code/p/11750767.html
本篇文章主要介绍如何使用Java操作Jira,包括获取连接,创建、修改、删除工单信息
1、获取Jira连接并执行请求:
/**
* 执行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、获取获得工单信息:
/**
* 活动工单信息
*
* @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、创建工单信息:
/**
* 创建工单
*
* @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的内容如下
{
"fields": {
"summary": "test008",
"issuetype": {
"name": "Task"
},
"project": {
"key": "MIN"
},
"description": "测试008",
"assignee": {
"name": "jwg"
}
}
}
- summary:工单主题
- issuetype:问题类型,问题类型是jira项目中存在的类型
- project:工单所属项目,工单所属项目是Jira中已经创建的项目
- description:工单描述,一些描述信息
- assignee:工单负责人,这个工单的负责人是谁
注意:data.json格式必须为json格式
4、更新工单信息:
/**
* 更新工单
*
* @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、查询工单信息:
/**
* 查询工单
* @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、为工单增加注释:
/**
* 为工单增加注释说明
* @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、删除工单:
/**
* 删除工单
* @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、上传附件:
/**
* 上传附件
* @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;
}
项目的完整代码如下:
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.Map; /**
* JIRA REST API 工具类
* https://developer.atlassian.com/jiradev/jira-apis/jira-rest-apis/jira-rest-api-tutorials
* https://docs.atlassian.com/jira/REST/7.0-SNAPSHOT/
* @author 用代码征服天下
*
*/
public class JiraTest { public static void main(String[] args) throws IOException {
// TODO Auto-generated method stub
//获取工单信息,参数为问题名称
JiraAPIUtil.getIssue("OAM-5402"); JiraAPIUtil.createIssue("MIN", "Task", "jwg", "工单描述","工单主题");
//
// Map<String,String> map = new HashMap<String,String>();
// map.put("assignee", "{\"name\":\"username\"}");
// map.put("summary", "\"summary00002\"");
// JiraAPIUtil.editIssue("MIN-1", map); JiraAPIUtil.searchIssues("assignee=username");
System.out.println("*****************************");
JiraAPIUtil.searchIssues("assignee=username+order+by+duedate");
System.out.println("*****************************"); JiraAPIUtil.addComments("MIN-1", "123456哈哈哈哈");
JiraAPIUtil.deleteIssueByKey("NQCP-38");
JiraAPIUtil.addAttachment("NQCP-39", "d://myfile01.json"); //linux路径: /home/boss/myfile.txt
JiraAPIUtil.addComments("createmeta", "123456哈哈哈哈");
} static String uri = "http://localhost:8080"; //Jira服务器地址
static String user = "jwg";//Jira用户名
static String pwd = "jwg123456";//Jira密码
static String osname = System.getProperty("os.name").toLowerCase(); //获取操作系统名称 /**
* 执行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();
} /**
* 活动工单信息
*
* @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; } /**
* 创建工单
*
* @param projectKey
* 项目key
* @param issueType
* 工单类型 name
* @param description
* 工单描述
* @param summary
* 工单主题
// * @param assignee
* 工单负责人
* 工单参数map,key为参数名称,value为参数值,参数值必须自带双引号 比如: map.put("assignee",
* "{\"name\":\"username\"}"); map.put("summary",
* "\"summary00002\"");
* @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;
} /**
* 更新工单
*
* @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;
} /**
* 查询工单
* @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;
} /**
* 为工单增加注释说明
* @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;
} /**
* 删除工单
* @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;
} /**
* 上传附件
* @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;
} }
Jira完整代码
Java连接Jira,创建、修改、删除工单信息的更多相关文章
- Java——Java连接Jira,创建、修改、删除工单信息
还不了解Jira是什么的同学可以看一下这篇文章:https://www.cnblogs.com/wgblog-code/p/11750767.html 本篇文章主要介绍如何使用Java操作Jira,包 ...
- oracle11g创建修改删除表
oracle11g创建修改删除表 我的数据库名字: ORCL 密码:123456 1.模式 2.创建表 3.表约束 4.修改表 5.删除表 1.模式 set oracle_sid=OR ...
- Linux创建修改删除用户和组
Linux 创建修改删除用户和组 介绍 在日常的维护过程中创建用户操作用的相对会多一些,但是在这个过程中涉及到的知识点就不单单就是useradd了,接下来就来详细了解账号管理的相关信息. 用户信息 先 ...
- Java实现文本创建、删除、编辑内容
Java实现文本创建.删除.编辑内容 1,创建文本代码: //创建文件并追加内容 public static void writeContentToTxt(StringBuffer Content,F ...
- MySQL进阶11--DDL数据库定义语言--库创建/修改/删除--表的创建/修改/删除/复制
/*进阶 11 DDL 数据库定义语言 库和表的管理 一:库的管理:创建/修改/删除 二:表的管理:创建/修改/删除 创建: CREATE DATABASE [IF NOT EXISTS] 库名; 修 ...
- Linux基础学习-用户的创建修改删除
用户添加修改删除 1 useradd添加用户 添加一个新用户hehe,指定uid为3000,家目录为/home/haha [root@qdlinux ~]# useradd -u 3000 -d /h ...
- ElasticSearch.net NEST批量创建修改删除索引完整示例
本示例采用Elasticsearch+Nest 网上查了很多资料,发现用C#调用Elasticsearch搜索引擎的功能代码很分散,功能不完整,多半是非常简单的操作,没有成型的应用示例.比如新增或修改 ...
- SQL Server 创建 修改 删除数据表
1. 图形界面方式操作数据表 (1)创建和修改数据表 列名中如果有两个以上单词时,最好用下划线连接,否则可能会给将来的查询维护带来不便.我们公司美国佬做的数据库就很烦,所有列名都有空格,一旦忘记用方括 ...
- Mysql创建修改删除-表
创建表之前要链接到库 例如 库名为 student use student; 连接结束可以查看此库中所有表 show tables; 创建表 create table student( id in ...
随机推荐
- 查看 ssh 攻击 和 攻击成功者
查看攻击失败记录: grep "Failed password for invalid user admin" /var/log/auth.log 查看攻击成功的记录: grep ...
- Java 13 特性解读
Java 13 特性解读 转 https://blog.csdn.net/bjweimengshu/article/details/100978383 2017年8月,JCP执行委员会提出将 ...
- Flutter 中AlertDialog确认提示弹窗
import 'package:flutter/material.dart'; import 'dart:async'; enum Action { Ok, Cancel } class AlertD ...
- 代替ESXI的虚拟机解决方案proxmox
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明.本文链接:https://blog.csdn.net/matengbing/article/de ...
- ModSecurity:一款优秀的开源WAF
一.ModSecurity3.0介绍 ModSecurity是一个开源的跨平台Web应用程序防火墙(WAF)引擎,用于Apache,IIS和Nginx,由Trustwave的SpiderLabs开发. ...
- openresty开发系列14--lua基础语法3函数
openresty开发系列14--lua基础语法3函数 一)function (函数) 有名函数: optional_function_scope function function_name( ar ...
- ISO/IEC 9899:2011 条款6.5.2——后缀操作符
6.5.2 后缀操作符 语法 1.postfix-expression: primary-expression postfix-expression [ expression ] p ...
- KSQL Syntax Reference
KSQL Syntax Reference KSQL has similar semantics to SQL: Terminate KSQL statements with a semicolon ...
- 安装私有docker仓库
简介: 虽然国内已经有了很多docker加速镜像,以前用的daocloud,最近又找到了阿里云. 但是私有网络部署kubernetes,用不了加速镜像,还是自己部署一个比较好. 一:安装docker ...
- POJ 2342 Anniversary party 树形DP基础题
题目链接:http://poj.org/problem?id=2342 题目大意:在一个公司中,每个职员有一个快乐值ai,现在要开一个party,邀请了一个员工就不可能邀请其直属上司,同理邀请了一个人 ...