参考资料:
Jira REST API exampleshttps://developer.atlassian.com/server/jira/platform/jira-rest-api-examples/
代码如下:
-
- # -*- coding: utf-8 -*-
- import requests
- import json
- import base64
- from requests.exceptions import ConnectionError
- import sys
- reload(sys)
- sys.setdefaultencoding("utf8")
-
-
- class JiraRestAPI(object):
- # CREATE_META = "{}/rest/api/2/issue/createmeta" # JIRA_SERVER
- USER_LIST_URL = "{}/rest/api/2/group/member" # JIRA_SERVER
- PORJECT_LIST_URL = "{}/rest/api/2/project" # JIRA_SERVER
- ISSUETYPE_URL = "{}/rest/api/2/issue/createmeta/{}/issuetypes" # JIRA_SERVER, projectIdOrKey
- CREATE_ISSUE_URL = "{}/rest/api/2/issue/" # JIRA_SERVER
-
- # testing
- SPECIAL_URL = "{}/rest/api/2/issue/createmeta/{}/issuetypes/{}" # JIRA_SERVER, projectIdOrKey, issueTypeId
- LIST_PROJECT_ISSUETYPES_URL = "{}/jira/rest/api/2/issue/createmeta/{}/issuetypes?startAt=0&maxResults=50" # JIRA_SERVER, projectIdOrKey
- GET_ISSUE_URL = "{}/rest/api/latest/issue/{}" # JIRA_SERVER, issueIdOrKey
- CREATEMETA_URL = "{}/rest/api/2/issue/createmeta" # JIRA_SERVER
-
-
- class JiraTool(object):
- def __init__(self, server_addr, username=None, passwd=None, access_token=None):
- self.server_addr = server_addr
- self.username = username
- self.passwd = passwd
- self.access_token = access_token if access_token else None
-
- def request_jira_reseapi(self, url, method="GET", payload=None):
- try:
- headers = {'Content-Type': 'application/json'}
- if self.access_token is not None:
- headers.update({'Authorization': 'Bearer {}'.format(self.access_token)})
- else:
- auth_base64 = base64.b64encode(self.username + ':' + self.passwd)
- headers.update({'Authorization': 'Basic {}'.format(auth_base64)})
-
- payload = json.dumps(payload) if payload else {}
- response = requests.request(method, url, headers=headers, data=payload, timeout=10)
- print(response, response.text)
- return response.status_code, response.json()
- # except ConnectionError:
- # return 500, {}
- except:
- return 500, {}
-
- def get_jira_user_list(self):
- """only admin user"""
- jira_api = JiraRestAPI.USER_LIST_URL.format(self.server_addr)
- return self.request_jira_reseapi(jira_api, "GET")
-
- def get_projects_list(self):
- jira_api = JiraRestAPI.PORJECT_LIST_URL.format(self.server_addr)
- return self.request_jira_reseapi(jira_api, "GET")
-
- def get_special_data(self, projectIdOrKey, issueTypeId):
- jira_api = JiraRestAPI.SPECIAL_URL.format(self.server_addr, projectIdOrKey, issueTypeId)
- return self.request_jira_reseapi(jira_api, "GET")
-
- def list_project_issuetypes_data(self, projectIdOrKey):
- jira_api = JiraRestAPI.LIST_PROJECT_ISSUETYPES_URL.format(self.server_addr, projectIdOrKey)
- return self.request_jira_reseapi(jira_api, "GET")
-
- def get_issuetypes(self, projectIdOrKey):
- jira_api = JiraRestAPI.ISSUETYPE_URL.format(self.server_addr, projectIdOrKey)
- return self.request_jira_reseapi(jira_api, "GET")
-
- def create_issue(self, payload):
- jira_api = JiraRestAPI.CREATE_ISSUE_URL.format(self.server_addr)
- return self.request_jira_reseapi(jira_api, "POST", payload)
-
- def get_issue_by_id(self, issue_id):
- """"test"""
- jira_api = JiraRestAPI.GET_ISSUE_URL.format(self.server_addr, issue_id)
- return self.request_jira_reseapi(jira_api, 'GET')
-
- def create_meta(self):
- """test"""
- jira_api = JiraRestAPI.CREATEMETA_URL.format(self.server_addr)
- return self.request_jira_reseapi(jira_api, 'GET')
-
-
- if __name__ == "__main__":
- pass
- # server_addr, username, passwd, access_token = 'http://192.168.1.1:8080', 'xuezhangjun', 'Admin123..', 'NjU5Nzc1MjY4NTU4OnPMAI3giaU3fILqRDEKc+p7jDV4'
-
- # jira_tool = JiraTool(server_addr, username, passwd, access_token)
-
- # projects # no version diff
- # status_code, projects = jira_tool.get_projects_list()
- # print(projects)
- # for project in projects:
- # print('project: id = {} | key = {} | name = {}'.format(
- # project.get('id'), project.get('key'), project.get('name')))
-
- # users # only admin | no version diff | need group name
- # users = jira_tool.get_jira_user_list()
- # print(users)
-
- # issuetypes # version >= 8.4
- # status_code, issuetypes = jira_tool.get_issuetypes("DEV")
- # print(issuetypes)
-
- # issuetypes # version < 8.4
- # code, res = jira_tool.create_meta()
- # print(res)
-
- # for data in issuetypes.get('values', []):
- # id = data.get('id')
- # name = data.get('name')
- # print('issuetype: name = {}, id = {}'.format(name, id))
- #
- # payload = { # >= 8.4
- # "fields":
- # {
- # "project": {"id": "10002"},
- # "summary": "REST ye merry gentlemen.", # title
- # "issuetype": {"id": "10002"},
- # "description": "@@@@@ ------ qwertyuiopasdfghjklzxcvbnm"
- # }
- # }
-
- # payload = { # < 8.4
- # "fields":
- # {
- # "project": {"id": "10000"},
- # "summary": "old jira test", # title
- # "issuetype": {"id": "10003"},
- # "description": "@@@@@ ------ qwertyuiopasdfghjklzxcvbnm"
- # }
- # }
- # result = jira_tool.create_issue(payload)
- # print(result)
-
- # result = jira_tool.get_issue_by_id('RDC-5952')
- # print(result)
-
- # code, res = jira_tool.create_meta()
- # for data in res:
- # print()