如何用Java代码导出Jira归档问题CSV并获取归档项目/问题列表
Jira 获取归档项目及问题的解决方案
一、修复REST API获取归档项目/问题的问题
- 先修正你之前的API参数错误:原请求里的
includeArchived=true.and是语法错误,正确的GET请求应该是GET /rest/api/2/project?includeArchived=true。注意必须拥有Browse Projects和View Archived Projects权限,否则接口不会返回归档项目。 - 如果还是拿不到归档项目,直接用Jira搜索API(JQL)抓取归档问题更高效,JQL语句用
project in archivedProjects(),对应的API请求是GET /rest/api/2/search?jql=project%20in%20archivedProjects(),返回结果里直接提取issueKey字段即可。
二、代码自动导出含归档问题的CSV
既然手动导出CSV能拿到所有归档问题,用代码模拟这个流程就行:
- 先发起CSV导出任务:调用
POST /rest/api/2/export/csv,请求体里指定JQL(比如project in archivedProjects()只抓归档问题,或者issuekey is not empty抓所有问题),并指定只导出issuekey字段减少数据量。 - 接口会返回一个
taskId,轮询GET /rest/api/2/export/csv/{taskId}直到任务状态变为DONE,拿到下载链接。 - 用账号凭证(API令牌或Cookie)下载CSV,再解析提取
issueKey。
Python示例代码
import requests import time import csv # 配置参数 JIRA_BASE = "https://adtjira.accenture.com" USER = "你的Jira账号" API_TOKEN = "你的API令牌" # 1. 发起CSV导出请求 export_data = { "jql": "project in archivedProjects()", "fields": ["issuekey"], "exportType": "csv" } resp = requests.post( f"{JIRA_BASE}/rest/api/2/export/csv", json=export_data, auth=(USER, API_TOKEN) ) task_id = resp.json()["taskId"] # 2. 轮询等待导出完成 while True: task_resp = requests.get( f"{JIRA_BASE}/rest/api/2/export/csv/{task_id}", auth=(USER, API_TOKEN) ) task_status = task_resp.json()["status"] if task_status == "DONE": download_link = task_resp.json()["url"] break time.sleep(5) # 3. 下载并提取issueKey csv_resp = requests.get(download_link, auth=(USER, API_TOKEN)) with open("archived_issues.csv", "wb") as f: f.write(csv_resp.content) # 解析CSV with open("archived_issues.csv", "r", encoding="utf-8") as f: reader = csv.DictReader(f) issue_keys = [row["Issue key"] for row in reader] print("归档IssueKey列表:", issue_keys)
三、ScriptRunner脚本修复方案
之前ScriptRunner拿不到归档问题,大概率是脚本没包含归档项目的查询逻辑,修改Groovy脚本如下:
import com.atlassian.jira.component.ComponentAccessor import com.atlassian.jira.bc.issue.search.SearchService def searchService = ComponentAccessor.getComponent(SearchService) def currentUser = ComponentAccessor.jiraAuthenticationContext.loggedInUser // 用JQL查询所有归档项目的问题 def jql = "project in archivedProjects()" def queryParseResult = searchService.parseQuery(currentUser, jql) if (queryParseResult.isValid()) { def searchResult = searchService.search(currentUser, queryParseResult.query, PagerFilter.getUnlimitedFilter()) // 遍历输出所有归档IssueKey searchResult.issues.each { issue -> log.info("归档IssueKey: ${issue.key}") // 这里可以添加存储到文件或数据库的逻辑 } } else { log.error("JQL解析失败: ${queryParseResult.errors}") }
内容的提问来源于stack exchange,提问作者NLearning
相关产品推荐
相关产品推荐

