You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用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能拿到所有归档问题,用代码模拟这个流程就行:

  1. 先发起CSV导出任务:调用POST /rest/api/2/export/csv,请求体里指定JQL(比如project in archivedProjects()只抓归档问题,或者issuekey is not empty抓所有问题),并指定只导出issuekey字段减少数据量。
  2. 接口会返回一个taskId,轮询GET /rest/api/2/export/csv/{taskId}直到任务状态变为DONE,拿到下载链接。
  3. 用账号凭证(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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.29 03:12:11