有时我们需要定期清理一些项目,把项目设置Archive 存档, 项目存档后

  • 项目将不可见,包括在搜索、项目列表、JQL的自动填充等
  • 项目中的Issue将不可见,包括在搜索、项目列表、JQL的自动填充等
  • 存档的项目不影响 配置方案、界面方案、工作流
  • 项目存档后再次 reindex, 将不会被建索引,提升搜索性能
  • 项目存档后管理员可以在存档项目中恢复该项目,恢复后需要对项目重新建索引

存档Archive 的功能在Data Center环境下才支持, Server版不支持存档的环境



下面是一个python脚本,可以一调用Jira的API 来批量Archive项目

前提和准备工作

依赖的Python库

python >= 3.6

本脚本依赖的第三方库是 reqeusts 库,也是一个常用的http库,如果您的系统没有安装需要安装

pip install requests
CODE

Jira的信息

需要以下Jira信息

  • Jira 的BaseUrl地址
  • 管理员用户和密码
  • 准备一个project 列表的文件,每一个project Key 一行

Python脚本

# 
# Copy right by 北京范德敏特
# Authors: Yin Liang
#
import json
import requests
from requests.auth import HTTPBasicAuth
import argparse
import logging

def main():   
    # Log
    # logging.basicConfig(format='%(asctime)s :: %(levelname)s :: %(message)s', filename='output.log', level=logging.INFO)
    logging.basicConfig(format='%(asctime)s :: %(levelname)s :: %(message)s', level=logging.INFO)

    # arg parse
    parser = argparse.ArgumentParser(description='Bulk change Jira project permission scheme')  
    parser.add_argument('--baseUrl', '-j', required=True, 
        help='Jira base url: e.g. http://teams.devpod.cn:8080')
    parser.add_argument('--user', '-u', required=True,
        help='Jira admin user name')
    parser.add_argument('--password', '-p',  required=True,
        help='Jira admin password')
    parser.add_argument('--projectsFile', '-f', type=argparse.FileType('r'), required=True,
        help='Pls input the project filse, each project Key as a line')
    args= parser.parse_args()
    logging.info(args)
    logging.info("starting archieve projects...")  

    # auth
    auth = HTTPBasicAuth(args.user, args.password)
    # call
    with args.projectsFile as f:
        for p in f:
            projectKey = p.strip()
            logging.info(f"Project {projectKey}")
            if projectKey:
                archiveProject(args.baseUrl, auth, projectKey)

def archiveProject(baseUrl, auth, projectKey):
    logging.info(f"call the chage scheme function for {projectKey}") 
    url = f"{baseUrl}/rest/api/latest/project/{projectKey}/archive"
    r = requests.put(url, auth=auth, verify=False)
    # Add some logs
    logging.info(f"Http response code is: {r.status_code}") 
    code = r.status_code
    if code == 204:
        logging.info(f"Project {projectKey} archived successfully")  

if __name__ == "__main__":
    main()
PY


脚本的使用

请使用python 3 来执行脚本 


查看帮助

> python archive_project.py  -h
                                                                  
usage: archive_project.py [-h] --baseUrl BASEURL --user USER --password PASSWORD --projectsFile PROJECTSFILE

Bulk change Jira project permission scheme

optional arguments:
  -h, --help            show this help message and exit
  --baseUrl BASEURL, -j BASEURL
                        Jira base url: e.g. http://teams.devpod.cn:8080
  --user USER, -u USER  Jira admin user name
  --password PASSWORD, -p PASSWORD
                        Jira admin password
  --projectsFile PROJECTSFILE, -f PROJECTSFILE
                        Pls input the project filse, each project Key as a line
BASH


使用举例

python archive_project.py -j 'http://teams.devpod.cn:8080'  -u admin -p password -f ./projects
BASH