获取所有 JIRA 问题的列表 (python)
Get list of all JIRA issues (python)
我正在尝试获取所有 JIRA 问题的列表,以便我可以按以下方式遍历它们:
from jira import JIRA
jira = JIRA(basic_auth=('username', 'password'), options={'server':'https://MY_JIRA.atlassian.net'})
issue = jira.issue('ISSUE_KEY')
print(issue.fields.project.key)
print(issue.fields.issuetype.name)
print(issue.fields.reporter.displayName)
print(issue.fields.summary)
print(issue.fields.comment.comments)
上面的代码 returns 所需的字段(但一次只有一个问题),但是,我需要能够将所有问题键的列表传递到:
issue = jira.issue('ISSUE_KEY')
我们的想法是编写一个 for 循环来遍历此列表并打印指示的字段。
我无法填充此列表。
有人能给我指出正确的方向吗?
您可以执行搜索而不是单个问题获取。
假设您的项目键是 PRO-KEY
,要执行搜索,您必须使用此查询:
https://MY_JIRA.atlassian.net/rest/api/2/search?jql=project=PRO-KEY
这将 return PRO-KEY
的前 50 期和 maxResults
字段中存在的期总数的一个数字。
Taken than number,您可以执行其他搜索添加到以前的查询:
&startAt=50
使用这个新参数,您将能够获取从 51 到 100 的问题(如果您认为第一个问题是 0,则可以获取 50 到 99)。
下一个查询将是 &startAt=100
等等,直到您找到 PRO-KEY
中的所有问题。
如果您希望获取超过 50 个问题,请添加到查询中:
&maxResults=200
您可以使用 jira.search_issues() 方法传入 JQL 查询。它将return匹配JQL的问题列表:
issues_in_proj = jira.search_issues('project=PROJ')
这将为您提供一个问题列表,您可以遍历这些问题
options = {'server': 'YOUR SERVER NAME'}
jira = JIRA(options, basic_auth=('YOUR EMAIL', 'YOUR PASSWORD'))
size = 100
initial = 0
while True:
start= initial*size
issues = jira.search_issues('project=<NAME OR ID>', start,size)
if len(issues) == 0:
break
initial += 1
for issue in issues:
print 'ticket-no=',issue
print 'IssueType=',issue.fields.issuetype.name
print 'Status=',issue.fields.status.name
print 'Summary=',issue.fields.summary
jira.search_issues() 的前 3 个参数是 jql 查询、起始索引(基于 0,因此需要在第 6 行相乘)和最大结果数。
def get_all_issues(jira_client, project_name, fields):
issues = []
i = 0
chunk_size = 100
while True:
chunk = jira_client.search_issues(f'project = {project_name}', startAt=i, maxResults=chunk_size, fields=fields)
i += chunk_size
issues += chunk.iterable
if i >= chunk.total:
break
return issues
issues = get_all_issues(jira, 'JIR', ["id", "fixVersion"])
从Python3.8开始阅读所有问题都可以做到相对简短和优雅:
issues = []
while issues_chunk := jira.search_issues('project=PROJ', startAt=len(issues)):
issues += list(issue issues_chunk)
(因为我们在每一步都需要 len(issues)
,所以我们不能使用列表理解,可以吗?
连同初始化和兑现以及“预处理”(例如只取 issue.raw
)你可以这样写:
jira = jira.JIRA(
server="https://jira.at-home.com",
basic_auth=json.load(open(os.path.expanduser("~/.jira-credentials")))
validate=True,
)
issues = json.load(open("jira_issues.json"))
while issues_chunk := jira.search_issues('project=PROJ', startAt=len(issues)):
issues += [issue.raw for issue issues_chunk]
json.dump(issues, open("jira_issues.json", "w"))
我正在尝试获取所有 JIRA 问题的列表,以便我可以按以下方式遍历它们:
from jira import JIRA
jira = JIRA(basic_auth=('username', 'password'), options={'server':'https://MY_JIRA.atlassian.net'})
issue = jira.issue('ISSUE_KEY')
print(issue.fields.project.key)
print(issue.fields.issuetype.name)
print(issue.fields.reporter.displayName)
print(issue.fields.summary)
print(issue.fields.comment.comments)
上面的代码 returns 所需的字段(但一次只有一个问题),但是,我需要能够将所有问题键的列表传递到:
issue = jira.issue('ISSUE_KEY')
我们的想法是编写一个 for 循环来遍历此列表并打印指示的字段。
我无法填充此列表。
有人能给我指出正确的方向吗?
您可以执行搜索而不是单个问题获取。
假设您的项目键是 PRO-KEY
,要执行搜索,您必须使用此查询:
https://MY_JIRA.atlassian.net/rest/api/2/search?jql=project=PRO-KEY
这将 return PRO-KEY
的前 50 期和 maxResults
字段中存在的期总数的一个数字。
Taken than number,您可以执行其他搜索添加到以前的查询:
&startAt=50
使用这个新参数,您将能够获取从 51 到 100 的问题(如果您认为第一个问题是 0,则可以获取 50 到 99)。
下一个查询将是 &startAt=100
等等,直到您找到 PRO-KEY
中的所有问题。
如果您希望获取超过 50 个问题,请添加到查询中:
&maxResults=200
您可以使用 jira.search_issues() 方法传入 JQL 查询。它将return匹配JQL的问题列表:
issues_in_proj = jira.search_issues('project=PROJ')
这将为您提供一个问题列表,您可以遍历这些问题
options = {'server': 'YOUR SERVER NAME'}
jira = JIRA(options, basic_auth=('YOUR EMAIL', 'YOUR PASSWORD'))
size = 100
initial = 0
while True:
start= initial*size
issues = jira.search_issues('project=<NAME OR ID>', start,size)
if len(issues) == 0:
break
initial += 1
for issue in issues:
print 'ticket-no=',issue
print 'IssueType=',issue.fields.issuetype.name
print 'Status=',issue.fields.status.name
print 'Summary=',issue.fields.summary
jira.search_issues() 的前 3 个参数是 jql 查询、起始索引(基于 0,因此需要在第 6 行相乘)和最大结果数。
def get_all_issues(jira_client, project_name, fields):
issues = []
i = 0
chunk_size = 100
while True:
chunk = jira_client.search_issues(f'project = {project_name}', startAt=i, maxResults=chunk_size, fields=fields)
i += chunk_size
issues += chunk.iterable
if i >= chunk.total:
break
return issues
issues = get_all_issues(jira, 'JIR', ["id", "fixVersion"])
从Python3.8开始阅读所有问题都可以做到相对简短和优雅:
issues = []
while issues_chunk := jira.search_issues('project=PROJ', startAt=len(issues)):
issues += list(issue issues_chunk)
(因为我们在每一步都需要 len(issues)
,所以我们不能使用列表理解,可以吗?
连同初始化和兑现以及“预处理”(例如只取 issue.raw
)你可以这样写:
jira = jira.JIRA(
server="https://jira.at-home.com",
basic_auth=json.load(open(os.path.expanduser("~/.jira-credentials")))
validate=True,
)
issues = json.load(open("jira_issues.json"))
while issues_chunk := jira.search_issues('project=PROJ', startAt=len(issues)):
issues += [issue.raw for issue issues_chunk]
json.dump(issues, open("jira_issues.json", "w"))