如何通过REST API在Jira中创建问题?

40

使用REST API在Jira中创建问题是否可能?我在文档中没有找到相关信息(没有针对问题的POST请求),但我认为这是可能的。

一个wget或curl示例将是不错的。

9个回答

40

将数据通过POST方式提交到此URL

https://<JIRA_HOST>/rest/api/2/issue/

这个数据:

{
"fields": {
   "project":
   { 
      "key": "<PROJECT_KEY>"
   },
   "summary": "REST EXAMPLE",
   "description": "Creating an issue via REST API",
   "issuetype": {
      "name": "Bug"
   }
  }
}

从收到的答案中将会有你的ISSUE的ID和key:

{"id":"83336","key":"PROJECT_KEY-4","self":"https://<JIRA_HOST>/rest/api/2/issue/83336"}

不要忘记授权。我使用了HTTP-Basic授权。


你能告诉我更多关于你提到的授权方面吗?是否需要传递项目所有者的用户名和密码?或者REST只接受带有URL、Header(json)和数据的POST请求? - Tru
我实际上收到了一个错误,显示“400 Bad Request...字段:摘要无法设置”。 - Tru
1
@Tru 是的。HTTP基本授权是授权类型。据我所知,还有其他可能的授权选项。来自手册首选的身份验证方法是HTTP Basic(在使用SSL时)和OAuth,两者都在JIRA REST API教程中有记录。其他支持的方法包括:HTTP Cookies、可信应用程序和os_username/os_password查询参数。 - msangel
curl -D- -u fred:fred -X GET -H "Content-Type: application/json" http://kelpie9:8081/rest/api/2/issue/createmeta - Alaa-GI
@Smita 不确定是否有帮助,因为您在创建工单时分配的屏幕可能有或没有列出字段,它将会相应地作出响应。请验证您所发布和更改的屏幕是否已列出这些字段。 - vipersassassin
显示剩余5条评论

9

JIRA 5.0中的REST API包含用于创建任务和子任务的方法。

(截至撰写本文时,5.0尚未发布,但您可以从EAP页面访问5.0-m4。有关在5.0-m4中创建问题的文档在此处。)


7
截至最新发布版本(4.3.3),使用REST API无法实现。您可以使用JIRA SOAP API远程创建问题。
请参考此页面上的Java客户端示例。

由于某些原因(缺乏标准兼容性),SOAP API 暗示了对 Axis 的依赖。我不能在我的应用程序中引入它。我相当确定有一种方法(可能是编写 JIRA 插件,如果没有更好的解决方案,我会这样做)。 - ymajoros

4

这是C#代码:

string postUrl = "https://netstarter.jira.com/rest/api/latest/issue";

var httpWebRequest = (HttpWebRequest)WebRequest.Create(postUrl);
httpWebRequest.ContentType = "application/json";
httpWebRequest.Method = "POST";
httpWebRequest.Headers["Authorization"] = "Basic " + Convert.ToBase64String(Encoding.Default.GetBytes("JIRAMMS:JIRAMMS"));

using (var streamWriter = new StreamWriter(httpWebRequest.GetRequestStream()))
{
    string json = @"{""fields"":{""project"":{""key"": ""JAPI""},""summary"": ""REST EXAMPLE"",""description"": ""Creating an issue via REST API 2"",""issuetype"": {""name"": ""Bug""}}}";

    streamWriter.Write(json);
    streamWriter.Flush();
    streamWriter.Close();

    var httpResponse = (HttpWebResponse)httpWebRequest.GetResponse();
    using (var streamReader = new StreamReader(httpResponse.GetResponseStream()))
    {
        var result = streamReader.ReadToEnd();
    }
}

3
为了更直接地回答这个问题,即使用 cURL。
要使用 cURL 访问 JIRA REST API 并创建一个案例,请使用:
curl -D- -u <username>:<password> -X POST --data-binary "@<filename>"  -H "Content-Type: application/json" http://<jira-host>/rest/api/2/issue/

请将此内容保存在您的<文件名>中(请根据您的Jira案例编辑字段),并保存在您称之为上面cURL命令的文件夹中。
{
    "fields": {
       "project":
       { 
           "key": "<PROJECT_KEY>"
       },
       "summary": "REST EXAMPLE",
       "description": "Creating an issue via REST API",
       "issuetype": {
           "name": "Bug"
       }
   }
}

这应该是有效的。(请注意,有时如果出现错误,可能是您的文件名中的内容不正确)。


2

能够使用REST API执行更多操作而不仅仅是读取数据,这是JIRA 5.x的一部分,任何想了解的人都可以知道。自那时以来,REST API并没有发生太大变化。 - mdoar

1
为了创建问题,设置时间估计并将其分配给自己,请使用以下方法:
  1. 生成Atlassian token

  2. 生成并保存base64编码的身份验证令牌:

    export b64token="$(echo "<your_email>:<generated_token>" | openssl base64)"

  3. 进行POST请求:

curl -X POST \
  https://<your_jira_host>.atlassian.net/rest/api/2/issue/ \
     -H 'Accept: */*' \
     -H 'Authorization: Basic $b64token \
     -d '{
       "fields":{
         "project":{
           "key":"<your_project_key (*)>"
         },
         "issuetype":{
           "name":"Task"
         },
         "timetracking":{
           "remainingEstimate":"24h"
        },
         "assignee":{
           "name":"<your_name (**)>"
       },
       "summary":"Endpoint Development"
     }
   }'

备注:

(*) 通常是项目描述的短小大写版本,例如:...atlassian.net/projects/UP/。

(**) 如果您不知道您的JIRA名称,请使用与上述相同的授权进行cURL GET到https://<your_jira_host>.atlassian.net/rest/api/2/search?jql=project=<any_project_name>,并查找issues.fields.assignee.name


1
为了使用REST API发送问题数据,我们需要构建一个有效的JSON字符串,其中包括问题详情。
一个基本的JSON字符串示例:
 {“fields” : { “project” : { “key” : “@KEY@” } , “issuetype” : { “name” : “@IssueType@” } } }

现在,建立到JIRA的连接并检查用户身份验证。 一旦建立了身份验证,我们通过XMLHTTP方法POST REST API + JSON字符串。 处理响应并通知用户响应的成功或失败。
因此,在这里JiraService是一个XMLHTTP对象,类似于这样添加问题,其中EncodeBase64是返回加密字符串的函数。
Public Function addJIRAIssue() as String
With JiraService
    .Open "POST", <YOUR_JIRA_URL> & "/rest/api/2/issue/", False
    .setRequestHeader "Content-Type", "application/json"
    .setRequestHeader "Accept", "application/json"
    .setRequestHeader "Authorization", "Basic " & EncodeBase64
    .send YOUR_JSON_STRING

    If .Status <> 401 Then
        addJIRAIssue = .responseText
    Else
        addJIRAIssue = "Error: Invalid Credentials!"
    End If

End With

Set JiraService = Nothing
End Sub

您可以查看一个完整的VBA示例代码


谢谢,但我在2年前已经接受了一个答案,并将坚持使用它。我对API文档感兴趣,而不是vb示例(即我唯一感兴趣的是YOUR_JSON_STRING中会有什么)。 - ymajoros
3
好的,没问题。我只是想发布这个答案,以便当一些需要使用 VBA 和 JIRA 的人访问此链接时,他们可能会觉得这很有用。我同意你的观点,被接受的答案非常完美。 - cyboashu

0

刚刚偶然发现这个问题,我正在尝试通过REST API创建一个问题,但遇到了一些问题。

issue_dict = {
    'project': {'key': "<Key>"},
    'summary': 'New issue from jira-python',
    'description': 'Look into this one',
    'issuetype': {'name': 'Test'},
}
new_issue = jira.create_issue(issue_dict)

new_issue返回一个已经存在的问题,而不是创建一个新的问题。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接