python jira增删改查

学习资料:
https://jira.readthedocs.io/en/master/examples.html#issues
https://www.jianshu.com/p/fdf0206c5331?utm_campaign=hugo

通过Python的Jira库来操作Jira

如何通过 Python 使用 Jira,目前主要是对 issue 进行增删改查操作。
Jira提供了完善的RESTful API,如果不想直接请求API接口可以使用Python的Jira库来操作Jira。
Issue是Jira的核心,Jira中的任务,用户Story,Bug实质上都是一个Issue。单个问题对象可以通过jira.issue(“问题的Key”)得到,问题的主要属性和方法如下:

创建/分配/转换问题
jira.create_issue(): 创建问题
jira.create_issues(): 批量创建问题
jira.assign_issue(): 分配问题
jira.transitions(): 获取问题的工作流
jira.transition_issue(): 转换问题

导入相关模块

from jira import JIRA
jira = JIRA(server=‘http://127.0.0.1:8080’, basic_auth=(‘user_name’, ‘password’))

新增 issue

new_issue = jira.create_issue(project='PROJ_key_or_id', summary='New issue from jira-python',description='Look into this one', issuetype={'name': 'Bug'})

效果等同于:

issue_dict = {
    'project': {'id': 123},
    'summary': 'New issue from jira-python',
    'description': 'Look into this one',
    'issuetype': {'name': 'Bug'},
}
new_issue = jira.create_issue(fields=issue_dict)

实例,提交BUG的代码实现如下:

issue_dict = {
  'project': {'id': 10202},#项目id
  'summary': '测试',#BUG概要
  'description': '测试',#BUG详情
  'priority': {'name':'Low'},#bug优先级
  'assignee':{'name':'chengzi@x.com'},#分配人
  'customfield_10316':{'name':'chengzi@x.com'},#责任人
  'labels': ['大大项目'],#所属项目
  'issuetype': {'id': 10004}#问题类型-故障
}
new_issue = jira.create_issue(issue_dict)
批量创建
issue_list = [
{
    'project': {'id': 123},
    'summary': 'First issue of many',
    'description': 'Look into this one',
    'issuetype': {'name': 'Bug'},
},
{
    'project': {'key': 'FOO'},
    'summary': 'Second issue',
    'description': 'Another one',
    'issuetype': {'name': 'Bug'},
},
{
    'project': {'name': 'Bar'},
    'summary': 'Last issue',
    'description': 'Final issue of batch.',
    'issuetype': {'name': 'Bug'},
}]
issues = jira.create_issues(field_list=issue_list)

删除 issue

issue = jira.issue(issue_key)
issue.delete()

更新 issue

issue = jira.issue('TEST-42')

issue.update(summary='new summary', description='A new summary was added')
issue.update(assignee={'name': 'new_user'})    # reassigning in update requires issue edit permission

查询 issue

#查询project信息
print (jira.projects())  #获取所有的projets
 
project =jira.project('SPDGT')  #获取projet为SPDGT的信息
print (project.key)  #获取项目的Key
print (project.name)  #获取项目名称
print (project.lead)  #获取项目负责人
print (project.description)  #项目描述
print (project.components)  #获取项目组件
print (project.raw)  #获取项目的原始API数据
print (project.projectCategory)  #获取项目分类

转换问题

jira.transition_issue(issue, ‘5’, assignee={‘name’: ‘pm_user’}, resolution={‘id’: ‘3’})
jira.transition_issue(issue, 目的状态)

PMS_STATUS_TRANSITION = {
    u"进行中": {
        u'ONLINE': ['51', '201', '131'],
        u'ONLINING': ['51', '201', '131'],
        u'DONE':  ['51', '201'],
        u'QUESTION': ['51'],
        u'DOING': ['51', '71'],
        u'PENDING':  ['51'],
        u'TOTEST': ['51'],
        u'ABORTED': ['181', '151']
    },
    u"已提测": {
        u'ONLINE': ['201', '131'],
        u'ONLINING': ['201', '131'],
        u'DONE': ['201'],
        u'DOING': ['71'],
        u'ABORTED': ['181', '151'],
        u'ADMIT_NOPASS': ['61'],
        u'ADMIT_RDNO': ['61'],
    },
    u"测试中": {
        u'ONLINE': ['111', '131'],
        u'ONLINING': ['111', '131'],
        u'DONE': ['111'],
        u'QUESTION': ['81'],
        u'PENDING': ['81'],
        u'TOTEST': ['81'],
        u'TODO':  ['81'],
        u'ABORTED': ['181', '151']
 
    },
    u"测试通过": {
        u'ONLINE': ['131'],
        u'ONLINING': ['131'],
        u'QUESTION': ['141'],
        u'DOING':  ['141', '71'],
        u'PENDING': ['141'],
        u'TOTEST': ['141'],
        u'TODO': ['141'],
        u'ABORTED': ['181', '151']
 
    },
    u"已上线": {
        u'DONE': ['171', '141', '111'],
        u'QUESTION': ['171', '141', '81'],
        u'DOING': ['171', '141'],
        u'PENDING': ['171', '141', '81'],
        u'TOTEST': ['171', '141', '81'],
        u'TODO':  ['171', '141', '81'],
        u'ABORTED': ['181', '151']
    },
}
 
def get_jira_now_status(pms_url):
    jira = JIRA(server='http://127.0.0.1:8080', basic_auth=('user_name', 'password')) 
    issue_id = pms_url.split("?")[0].split("/")[-1]
    issue = jira.issue(issue_id)
    pms_status_now = issue.fields.status.name
    return pms_status_now
 
def update_jira_status(pms_url, status_name):
    ret = {
        "msg": "",
        "retcode": 200
    }
    if "BUG" in pms_url:
        ret["msg"] = "BUG暂时不支持修改"
        ret["retcode"] = 304
        return ret
    pms_status_now = get_jira_now_status(pms_url)
    if pms_status_now in PMS_STATUS_TRANSITION.keys():
        try:
            change_info = PMS_STATUS_TRANSITION[pms_status_now]
            if status_name in change_info.keys():
                jira = JIRA(server='http://127.0.0.1:8080', basic_auth=('user_name', 'password')) 
                issue_id = pms_url.split("?")[0].split("/")[-1]
                issue = jira.issue(issue_id)
                change_status = change_info[status_name]
                for ch_status in change_status:
                    jira.transition_issue(issue, ch_status)
                ret["msg"] = "更新状态成功"
        except Exception as e:
            print(e)
            ret["retcode"] = 404
            ret["msg"] = "更新失败"
    return ret
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值