Jira——如何通过 REST API 获取问题变更日志——但不是单一问题
Jira -- How to get issue changelog via REST API - but ALL, not single issue
这个问题我已经看过很多次了,但是没有足够的答案。
我们正在尝试将所有 JIRA 数据转储到我们的数据仓库/BI 系统中。或者至少,有趣的部分。
您可以做的一件事是直接使用字段持续时间跟踪状态时间、周期时间、提前期。这通过 JIRA 的直接 SQL 数据库非常容易。表 changeItem 和 changeGroup。
当然,REST JSON API 对数据库的性能影响较小。
但是...在其余 API 中似乎没有等效的方法来获取所有问题更改历史记录。是的,您可以通过 API 调用直接获取一个问题的变更日志。如果您有 10 万个问题,您是否期望进行 10 万次 API 调用,遍历问题 ID?听起来很疯狂。
是否可以通过收集所有问题数据的搜索 API 扩展更新日志?我没看过。我在这里寻找的可能吗?还是我们必须坚持 SQL 路线?
我认为您问的问题与以前几乎相同:,但在获取变更日志数据方面也很有趣。
是的,您必须再次批量执行,多次请求 JIRA API。
这是 bash 小脚本,可以帮助您做到这一点:
#!/usr/bin/env bash
LDAP_USERNAME='<username>'
LDAP_PASSWORD='<password>'
JIRA_URL='https://jira.example.com/rest/api/2/search?'
JQL_QUERY='project=FOOBAR'
START_AT=0
MAX_RESULTS=50
TOTAL=$(curl --silent -u "${LDAP_USERNAME}:${LDAP_PASSWORD}" -X GET -H "Content-Type: application/json" "${JIRA_URL}maxResults=0&jql=${JQL_QUERY}" | jq '.total')
echo "Query would export ${TOTAL} issues."
while [ ${START_AT} -lt ${TOTAL} ]; do
echo "Exporting from ${START_AT} to $((START_AT + MAX_RESULTS))"
curl --silent -u "${LDAP_USERNAME}:${LDAP_PASSWORD}" -X GET -H "Content-Type: application/json" "${JIRA_URL}maxResults=${MAX_RESULTS}&startAt=${START_AT}&jql=${JQL_QUERY}& expand=changelog" | jq -c '.issues[]' >> issues.json
START_AT=$((START_AT + MAX_RESULTS))
done
请注意 expand 参数,它还会将所有更改日志也放入 json 转储中。或者,您可以使用 issue dumper python 解决方案:实施 回调 将数据存储到数据库,您就完成了。
另一项值得考虑的服务,尤其是当您需要像更改列表这样的提要时:
/plugins/servlet/streams?maxResults=99&issues=activity+IS+issue%3Aupdate&providers=issues
此 returns 问题的最后更改提要 XML 格式的某些标准,例如用户等。实际上,您可以使用“Activity 流”小工具一个仪表板,看看它是否有效。
该服务一次最多可更改 99 个,但有分页(请参阅“显示更多..”按钮)
这个问题我已经看过很多次了,但是没有足够的答案。
我们正在尝试将所有 JIRA 数据转储到我们的数据仓库/BI 系统中。或者至少,有趣的部分。
您可以做的一件事是直接使用字段持续时间跟踪状态时间、周期时间、提前期。这通过 JIRA 的直接 SQL 数据库非常容易。表 changeItem 和 changeGroup。
当然,REST JSON API 对数据库的性能影响较小。
但是...在其余 API 中似乎没有等效的方法来获取所有问题更改历史记录。是的,您可以通过 API 调用直接获取一个问题的变更日志。如果您有 10 万个问题,您是否期望进行 10 万次 API 调用,遍历问题 ID?听起来很疯狂。
是否可以通过收集所有问题数据的搜索 API 扩展更新日志?我没看过。我在这里寻找的可能吗?还是我们必须坚持 SQL 路线?
我认为您问的问题与以前几乎相同:
是的,您必须再次批量执行,多次请求 JIRA API。 这是 bash 小脚本,可以帮助您做到这一点:
#!/usr/bin/env bash
LDAP_USERNAME='<username>'
LDAP_PASSWORD='<password>'
JIRA_URL='https://jira.example.com/rest/api/2/search?'
JQL_QUERY='project=FOOBAR'
START_AT=0
MAX_RESULTS=50
TOTAL=$(curl --silent -u "${LDAP_USERNAME}:${LDAP_PASSWORD}" -X GET -H "Content-Type: application/json" "${JIRA_URL}maxResults=0&jql=${JQL_QUERY}" | jq '.total')
echo "Query would export ${TOTAL} issues."
while [ ${START_AT} -lt ${TOTAL} ]; do
echo "Exporting from ${START_AT} to $((START_AT + MAX_RESULTS))"
curl --silent -u "${LDAP_USERNAME}:${LDAP_PASSWORD}" -X GET -H "Content-Type: application/json" "${JIRA_URL}maxResults=${MAX_RESULTS}&startAt=${START_AT}&jql=${JQL_QUERY}& expand=changelog" | jq -c '.issues[]' >> issues.json
START_AT=$((START_AT + MAX_RESULTS))
done
请注意 expand 参数,它还会将所有更改日志也放入 json 转储中。或者,您可以使用 issue dumper python 解决方案:实施 回调 将数据存储到数据库,您就完成了。
另一项值得考虑的服务,尤其是当您需要像更改列表这样的提要时:
/plugins/servlet/streams?maxResults=99&issues=activity+IS+issue%3Aupdate&providers=issues
此 returns 问题的最后更改提要 XML 格式的某些标准,例如用户等。实际上,您可以使用“Activity 流”小工具一个仪表板,看看它是否有效。
该服务一次最多可更改 99 个,但有分页(请参阅“显示更多..”按钮)