• python 操作jira


    参考资料:

    Welcome to Atlassian Python API’s documentation! — Atlassian Python API 3.29.0 documentationicon-default.png?t=M85Bhttps://atlassian-python-api.readthedocs.io/index.html

    Python操作Jira库常用方法解析_Python-考高分网Python操作Jira库常用方法解析Jira提供了完善的RESTful API,如果不想直接请求API接口可以使用Python的Jira库来操作JiraJira Python文档安装方法pip install jira认证Jira的访问是有权限的,在访问Jira项目时首http://www.kaotop.com/it/20025.html 

    Jira REST API exampleshttps://developer.atlassian.com/server/jira/platform/jira-rest-api-examples/ 

    代码如下:

    1. # -*- coding: utf-8 -*-
    2. import requests
    3. import json
    4. import base64
    5. from requests.exceptions import ConnectionError
    6. import sys
    7. reload(sys)
    8. sys.setdefaultencoding("utf8")
    9. class JiraRestAPI(object):
    10. # CREATE_META = "{}/rest/api/2/issue/createmeta" # JIRA_SERVER
    11. USER_LIST_URL = "{}/rest/api/2/group/member" # JIRA_SERVER
    12. PORJECT_LIST_URL = "{}/rest/api/2/project" # JIRA_SERVER
    13. ISSUETYPE_URL = "{}/rest/api/2/issue/createmeta/{}/issuetypes" # JIRA_SERVER, projectIdOrKey
    14. CREATE_ISSUE_URL = "{}/rest/api/2/issue/" # JIRA_SERVER
    15. # testing
    16. SPECIAL_URL = "{}/rest/api/2/issue/createmeta/{}/issuetypes/{}" # JIRA_SERVER, projectIdOrKey, issueTypeId
    17. LIST_PROJECT_ISSUETYPES_URL = "{}/jira/rest/api/2/issue/createmeta/{}/issuetypes?startAt=0&maxResults=50" # JIRA_SERVER, projectIdOrKey
    18. GET_ISSUE_URL = "{}/rest/api/latest/issue/{}" # JIRA_SERVER, issueIdOrKey
    19. CREATEMETA_URL = "{}/rest/api/2/issue/createmeta" # JIRA_SERVER
    20. class JiraTool(object):
    21. def __init__(self, server_addr, username=None, passwd=None, access_token=None):
    22. self.server_addr = server_addr
    23. self.username = username
    24. self.passwd = passwd
    25. self.access_token = access_token if access_token else None
    26. def request_jira_reseapi(self, url, method="GET", payload=None):
    27. try:
    28. headers = {'Content-Type': 'application/json'}
    29. if self.access_token is not None:
    30. headers.update({'Authorization': 'Bearer {}'.format(self.access_token)})
    31. else:
    32. auth_base64 = base64.b64encode(self.username + ':' + self.passwd)
    33. headers.update({'Authorization': 'Basic {}'.format(auth_base64)})
    34. payload = json.dumps(payload) if payload else {}
    35. response = requests.request(method, url, headers=headers, data=payload, timeout=10)
    36. print(response, response.text)
    37. return response.status_code, response.json()
    38. # except ConnectionError:
    39. # return 500, {}
    40. except:
    41. return 500, {}
    42. def get_jira_user_list(self):
    43. """only admin user"""
    44. jira_api = JiraRestAPI.USER_LIST_URL.format(self.server_addr)
    45. return self.request_jira_reseapi(jira_api, "GET")
    46. def get_projects_list(self):
    47. jira_api = JiraRestAPI.PORJECT_LIST_URL.format(self.server_addr)
    48. return self.request_jira_reseapi(jira_api, "GET")
    49. def get_special_data(self, projectIdOrKey, issueTypeId):
    50. jira_api = JiraRestAPI.SPECIAL_URL.format(self.server_addr, projectIdOrKey, issueTypeId)
    51. return self.request_jira_reseapi(jira_api, "GET")
    52. def list_project_issuetypes_data(self, projectIdOrKey):
    53. jira_api = JiraRestAPI.LIST_PROJECT_ISSUETYPES_URL.format(self.server_addr, projectIdOrKey)
    54. return self.request_jira_reseapi(jira_api, "GET")
    55. def get_issuetypes(self, projectIdOrKey):
    56. jira_api = JiraRestAPI.ISSUETYPE_URL.format(self.server_addr, projectIdOrKey)
    57. return self.request_jira_reseapi(jira_api, "GET")
    58. def create_issue(self, payload):
    59. jira_api = JiraRestAPI.CREATE_ISSUE_URL.format(self.server_addr)
    60. return self.request_jira_reseapi(jira_api, "POST", payload)
    61. def get_issue_by_id(self, issue_id):
    62. """"test"""
    63. jira_api = JiraRestAPI.GET_ISSUE_URL.format(self.server_addr, issue_id)
    64. return self.request_jira_reseapi(jira_api, 'GET')
    65. def create_meta(self):
    66. """test"""
    67. jira_api = JiraRestAPI.CREATEMETA_URL.format(self.server_addr)
    68. return self.request_jira_reseapi(jira_api, 'GET')
    69. if __name__ == "__main__":
    70. pass
    71. # server_addr, username, passwd, access_token = 'http://192.168.1.1:8080', 'xuezhangjun', 'Admin123..', 'NjU5Nzc1MjY4NTU4OnPMAI3giaU3fILqRDEKc+p7jDV4'
    72. # jira_tool = JiraTool(server_addr, username, passwd, access_token)
    73. # projects # no version diff
    74. # status_code, projects = jira_tool.get_projects_list()
    75. # print(projects)
    76. # for project in projects:
    77. # print('project: id = {} | key = {} | name = {}'.format(
    78. # project.get('id'), project.get('key'), project.get('name')))
    79. # users # only admin | no version diff | need group name
    80. # users = jira_tool.get_jira_user_list()
    81. # print(users)
    82. # issuetypes # version >= 8.4
    83. # status_code, issuetypes = jira_tool.get_issuetypes("DEV")
    84. # print(issuetypes)
    85. # issuetypes # version < 8.4
    86. # code, res = jira_tool.create_meta()
    87. # print(res)
    88. # for data in issuetypes.get('values', []):
    89. # id = data.get('id')
    90. # name = data.get('name')
    91. # print('issuetype: name = {}, id = {}'.format(name, id))
    92. #
    93. # payload = { # >= 8.4
    94. # "fields":
    95. # {
    96. # "project": {"id": "10002"},
    97. # "summary": "REST ye merry gentlemen.", # title
    98. # "issuetype": {"id": "10002"},
    99. # "description": "@@@@@ ------ qwertyuiopasdfghjklzxcvbnm"
    100. # }
    101. # }
    102. # payload = { # < 8.4
    103. # "fields":
    104. # {
    105. # "project": {"id": "10000"},
    106. # "summary": "old jira test", # title
    107. # "issuetype": {"id": "10003"},
    108. # "description": "@@@@@ ------ qwertyuiopasdfghjklzxcvbnm"
    109. # }
    110. # }
    111. # result = jira_tool.create_issue(payload)
    112. # print(result)
    113. # result = jira_tool.get_issue_by_id('RDC-5952')
    114. # print(result)
    115. # code, res = jira_tool.create_meta()
    116. # for data in res:
    117. # print()

  • 相关阅读:
    【Rust日报】2023-09-25 Rust + Wasm 是 AGI 的语言吗
    代码随想录二刷 Day46
    raylib部分源代码功能解读
    亚马逊圣诞灯饰UL588测试报告检测项目介绍
    【Cisco Packet Tracer】管理方式,命令,接口trunk,VLAN
    Condition条件队列
    [SDX12]隐藏显示dnsmasq的版本号信息,使其使用nmap无法扫描到版本信息方法实现
    JavaScript事件执行机制
    4. 3 配置Mysql与注册登录模块(下)
    简单实现接口自动化测试(基于python+unittest)
  • 原文地址:https://blog.csdn.net/xuezhangjun0121/article/details/126931170