如何在SonarQube中删除超一周未使用项目?含自动化与手动方案问询
嘿,针对你要删除SonarQube里超过一周未使用项目的需求,我整理了自动化和手动两种可行方案,帮你高效搞定这件事:
自动化执行方案
SonarQube提供了完整的Web API,完全可以实现自动化批量删除符合条件的项目,步骤如下:
第一步:生成权限足够的Token
登录SonarQube后,进入个人设置(右上角头像 -> My Account -> Security),生成一个拥有admin权限或者至少projects.delete权限的Token,记下来后面要用。第二步:编写脚本筛选并删除项目
你可以用Python、Bash等语言写脚本,核心是调用两个API:GET api/projects/search:获取所有项目列表,返回的每个项目对象里包含lastAnalysisDate字段(最后一次分析的时间)POST api/projects/delete:传入项目key删除指定项目
给你一个Python的示例脚本(需要先安装
requests库):import requests from datetime import datetime, timedelta # 配置信息 SONAR_URL = "http://你的SonarQube地址" SONAR_TOKEN = "你的Token" DAYS_THRESHOLD = 7 # 计算一周前的日期(SonarQube的日期格式是ISO 8601,比如2024-05-20T12:34:56+0800) cutoff_date = (datetime.now() - timedelta(days=DAYS_THRESHOLD)).isoformat() # 获取所有项目 headers = {"Authorization": f"Bearer {SONAR_TOKEN}"} params = {"ps": 500} # 每页最多500个项目,可根据实际调整 projects = [] while True: response = requests.get(f"{SONAR_URL}/api/projects/search", headers=headers, params=params) response.raise_for_status() data = response.json() projects.extend(data["components"]) if data["paging"]["pageIndex"] * data["paging"]["pageSize"] >= data["paging"]["total"]: break params["p"] = data["paging"]["pageIndex"] + 1 # 筛选出超过一周未分析的项目 stale_projects = [p for p in projects if p.get("lastAnalysisDate", "") < cutoff_date] # 批量删除 for project in stale_projects: print(f"正在删除项目:{project['name']} (key: {project['key']})") delete_response = requests.post( f"{SONAR_URL}/api/projects/delete", headers=headers, params={"project": project["key"]} ) delete_response.raise_for_status() print(f"完成!共删除{len(stale_projects)}个超过一周未使用的项目")你可以把这个脚本放到定时任务里(比如Linux的cron,Windows的任务计划),定期自动执行。
手动操作方案
如果暂时不想写脚本,也可以优化你现在的批量操作流程,更精准高效:
- 登录SonarQube,进入「项目管理」页面(顶部导航栏 -> Projects -> Manage Projects)
- 点击页面上方的「筛选」按钮,添加筛选条件:选择「最后分析日期」,然后设置为「早于」,再选择7天前的日期
- 筛选完成后,点击页面左上角的批量选择复选框,选中所有符合条件的项目
- 点击页面顶部的「删除」按钮,在弹出的确认框中确认即可完成批量删除
注意事项
- 不管是自动化还是手动操作,删除前建议先备份SonarQube数据库,避免误删重要项目
- 自动化脚本首次运行时,可以先注释掉删除的代码,只打印要删除的项目列表,确认无误后再执行删除操作
- 如果你的SonarQube版本较旧,API参数可能略有不同,可以参考官方的API文档调整
内容的提问来源于stack exchange,提问作者Vignesh P
相关产品推荐
相关产品推荐

