参考资料:
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()