- 环境依赖:python库 redis jira
安装命令:
pip install redis
pip install jira
redis服务安装命令:
$sudo apt-get update
$sudo apt-get install redis-server
启动 Redis :$redis-server
查看 redis 是否启动?:$ redis-cli ping PONG
- 自动创建代码
#!/usr/bin/python
# -*- coding:utf-8 -*-
from jira import JIRA
import sys, getopt, redis, os
class JiraTool:
def __init__(self):
self.server = 'https:/jira。example.net'
self.basic_auth = ('username', 'password')
self.jiraClinet = None
def login(self):
self.jiraClinet = JIRA(server=self.server, basic_auth=self.basic_auth)
if self.jiraClinet != None:
return True
else:
return False
def findIssueById(self, issueId):
if issueId:
if self.jiraClinet == None:
self.login()
return self.jiraClinet.issue(issueId)
else:
return 'Please input your issueId'
def createIssue(self, description, assignee, project, parent, filepath):
issue_dict = {
'project': {'key': project},
'issuetype': {'name': 'Sub-Task'},
'parent': {'key': parent},
'summary': '[xxx]Auto sync file %s from storage-cnn to storage'%(filepath),
'description': description,
'assignee': {'name': assignee},
'customfield_12603': {'value': 'xxx'},
'components': [{'name': 'SCM'}],
'priority': {'name': 'Major'},
}
if self.jiraClinet == None:
self.login()
return self.jiraClinet.create_issue(issue_dict)
if __name__ == '__main__':
redisTool = redis.Redis(host='127.0.0.1', port=6379)
jiraTool = JiraTool()
jiraTool.login()
description = ''
assignee = ''
watchers = None
project = ''
parent = ''
openIssuekey = ''
cnnStoragePath = 'xxxxx'
opts, args = getopt.getopt(sys.argv[1:], 'd:a:w:p:o:')
for op, value in opts:
if op == '-d':
filepath = value
elif op == '-a':
user = jiraTool.jiraClinet.search_users(user=value)
if user:
assignee = user[0].key
else:
print ('Please make sure that the user email is correct!')
sys.exit(-1)
elif op == '-p':
if 'Austin' in value:
project = 'xxxx'
parent = 'xxxx'
cnnStoragePath = os.path.join(cnnStoragePath,'xxxx')
elif 'Ford' in value:
project = 'xxxxx'
parent = 'xxxxx'
cnnStoragePath = os.path.join(cnnStoragePath,'xxxxx')
else:
print ('Please make sure that the project is correct!')
sys.exit(-1)
elif op == '-w':
watchers = value.split(',')
elif op == '-o':
openIssuekey = value
if not openIssuekey:
print ('Please make sure that the openIssuekey is correct!')
sys.exit(-1)
break
try:
if openIssuekey:
issuekeyTmp = redisTool.get(openIssuekey)
issue = jiraTool.findIssueById(issuekeyTmp)
print openIssuekey, '----', issuekeyTmp, '----', issue.fields.status
if 'Screen' in str(issue.fields.status):
print 'Update %s status screen ----> open ' % (issuekeyTmp)
jiraTool.jiraClinet.transition_issue(issue, 151)
redisTool.delete(openIssuekey)
else:
print 'Please make sure the issue status is not screen'
else:
if not filepath:
print('Please make sure that the file path is correct!')
sys.exit(-1)
if not assignee:
print('Please make sure that the assignee is correct!')
sys.exit(-1)
if not project:
print ('Please make sure that the project is correct!')
sys.exit(-1)
print('Creating issue now')
cnnStoraePath = os.path.join(cnnStoragePath,filepath)
description = '[Files to sync]\n' + cnnStoragePath
print "cnnStoragePath: " + cnnStoragePath
print "description: " + description
print "assignee: " + assignee
issue = jiraTool.createIssue(description, assignee, project, parent,filepath)
issueKey = issue.key
redisTool.set(filepath, issueKey)
print('issue key is ---->', issueKey)
if watchers:
for watcherItem in watchers:
watcher = jiraTool.jiraClinet.search_users(user=watcherItem)
if watcher:
watcherKey = watcher[0].key
jiraTool.jiraClinet.add_watcher(issue=issueKey, watcher=watcherKey)
else:
print('%s user does not exis' % (watcherItem))
jiraTool.jiraClinet.add_comment(issue=issueKey, body='%s user does not exis' % (watcherItem))
except Exception as e:
print e
sys.exit(-1)