我想找到 Jira 问题的所有拉取请求。显然,这是一个可能的任务,正如 Jira 本身显示的信息:
目前,我通过 Bitbucket API 检索所有合并和打开的拉取请求的列表,并将这些请求与我的问题编号进行模式匹配。这非常耗时,甚至更耗时,因为我必须批量加载 100 个拉取请求(Bitbucket 中的最大限制),而且我们的代码分布在多个存储库中。
有一个对 bitbucket 的集成 api 调用:/rest/jira/1.0/issues//commits,它将显示对此问题的所有提交,但是 .../pullrequests 不可用。
有谁知道,Jira 如何检索这些信息?
https://github.com/jira-node/node-jira-client/issues/142
JIRA 有一个未记录的“开发状态”API,当 JIRA 与 Stash(Bitbucket 服务器)等其他工具集成时,该 API 很常见
首先你必须获得jiraIssueNumericId。 例如,您可以通过有据可查的 Jira API 获取问题信息来获取它。您要查找的字段是“id”。 https://docs.atlassian.com/software/jira/docs/api/REST/7.6.1/?_ga=2.203378385.1940451621.1522669776-298439511.1476796418#api/2/issue-getIssue)
关于此Jira dev-status API的方法:
https://{jiraHost}/rest/dev-status/latest/issue/detail?issueId={jiraIssueNumericId}&applicationType=stash&dataType=pullrequest
https://{jiraHost}/rest/dev-status/latest/issue/detail?issueId={jiraIssueNumericId}&applicationType=stash&dataType=repository
https://{jiraHost}/rest/dev-status/latest/issue/summary?issueId={jiraIssueNumericId}
附注这个API实际上是在Jira的问题页面上使用的。尝试单击拉取请求链接以打开包含请求列表的弹出窗口。在浏览器的开发面板中的“网络”选项卡中,您将找到 XHR 调用或这些 url。
P.P.S。是的,我也很难找到这些信息,但我不知道为什么它没有记录。
看起来这个端点曾经记录在API中https://developer.atlassian.com/static/rest/stash/2.6.0/stash-jira-integration-rest.html#idp21856
但我很确定它是一个内部 API,所以你不应该依赖它的稳定性。当前文档没有列出它https://developer.atlassian.com/static/rest/bitbucket-server/4.13.0/bitbucket-rest.html
正确的API:
https://{jiraHost}/rest/dev-status/latest/issue/details?issueId={jiraIssueNumericId}&applicationType=<scm>&dataType=<option>
其中
<scm>
可以是 bitbucket、stash 或 githubdataType
可以是分支或拉取请求
我的答案也使用相同的
dev-status
API,但让我提供其工作的完整步骤。我将为 API 提供 cURL,以便您可以将其翻译成任何首选语言。
遗憾的是,如果没有您的实际 JIRA 密码,我找不到任何其他方法来使用此 API,JIRA 令牌对我不起作用。如果您可以在没有实际密码的情况下使其正常工作,也请告诉我。
我假设您已经拥有了票证 ID,并且它是与每个文本 ID 相对应的数字 ID(例如。
STACK-100
可能有一个类似于 301736
的 ID)
这是我们首先需要通过实际用户名和密码登录 JIRA 的地方,从中我们从 cookie 中提取此会话 ID:
curl --location 'https://YOUR_JIRA_URL/login.jsp' \
--data-urlencode 'os_username=YOUR_USERNAME' \
--data-urlencode 'os_password=YOUR_PASSWORD' \
--data-urlencode 'os_destination=' \
--data-urlencode 'user_role=' \
--data-urlencode 'atl_token=' \
--data-urlencode 'login=Log In'
不要忘记用正确的值替换:
YOUR_JIRA_URL
、YOUR_USERNAME
和YOUR_PASSWORD
。
成功的请求将产生 HTML 响应。忽略它并查看响应的 cookie。在那里您将找到 JSESSIONID 及其值。我们用它来提出下一个请求:
执行这个cURL:
curl --location 'https://YOUR_JIRA_URL/rest/dev-status/latest/issue/detail?issueId=ISSUE_ID&applicationType=stash&dataType=pullrequest' \
--header 'Cookie: JSESSIONID=EXTRACTED_JSESSIONID;'
这将为您提供所需的响应。不要忘记替换:
YOUR_JIRA_URL
、ISSUE_ID
和 EXTRACTED_JSESSIONID
具有正确的值。