环境依赖 : 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

以上命令将打开以下终端:

                  redis 127.0.0.1:6379>

127.0.0.1 是本机 IP ,6379 是 redis 服务端口。现在我们输入 PING 命令。

                  redis 127.0.0.1:6379> ping PONG
AutoCreateIssue
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
#!/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')
 
            cnnStoragePath = 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)

  

   

【python】jiraAPI使用教程 自动创建jira问题单并置状态为OPEN的更多相关文章

  1. Python中根据时间自动创建文件夹

    导语 ​ 电脑桌面文件太多查找起来比较花费时间,并且凌乱的电脑桌面也会影响工作心情,于是利用python根据时间自动建立当日文件夹,这样就可以把桌面上文件按时间进行存放. 代码实现 # _*_codi ...

  2. 阿里云ecs自动创建快照教程

    最近在一个博客联盟的微信群里面看到经常有朋友问阿里云的ecs服务器怎么设置自动创建快照,也不知道最近是怎么了,看到问这个问题的朋友有有四五个左右了,今天就特意到博客里来费大家分享设置自动创建快照的方法 ...

  3. Python 官方中文教程(简)

    Python 官方教程 前言 这是一次系统学习Python官方教程的学习笔记 整个教程一共16章, 在学习过程中记录自己不知道的和一些重要的知识, 水平有限, 请指正. Python3.7 官方教程. ...

  4. Python Numpy基础教程

    Python Numpy基础教程 本文是一个关于Python numpy的基础学习教程,其中,Python版本为Python 3.x 什么是Numpy Numpy = Numerical + Pyth ...

  5. Python解释器安装教程以及环境变量配置 以及 pycharm的安装与激活

    计算机的组成 主板:人的骨架,用于拓展设备 CPU:人的大脑,用于计算和逻辑处理 硬盘:存储数据(永久储存),比如电脑上的 C盘,D盘 内存:临时记忆(断电即消失) 操作系统:XP win7 win1 ...

  6. HelloDjango 系列教程:创建 Django 博客的数据库模型

    文中涉及的示例代码,已同步更新到 HelloGitHub-Team 仓库 设计博客的数据库表结构 博客最主要的功能就是展示我们写的文章,它需要从某个地方获取博客文章数据才能把文章展示出来,通常来说这个 ...

  7. 面系那个对象开发原则.高内聚.低耦合+Python安装详细教程+print输出带颜色的方法

    面系那个对象开发原则.高内聚.低耦合 软件设计中通常用耦合度和内聚度作为衡量模块独立程度的标准.划分摸块的一个准则就是高内聚低耦合. 这是软件工程中的概念,是判断设计好坏的标准,主要是面向OO的设计, ...

  8. 史上最全Python快速入门教程,满满都是干货

    Python是面向对象,高级语言,解释,动态和多用途编程语言.Python易于学习,而且功能强大,功能多样的脚本语言使其对应用程序开发具有吸引力.Python的语法和动态类型具有其解释性质,使其成为许 ...

  9. Python验证码6位自动生成器

    Python验证码6位自动生成器

随机推荐

  1. 使windows隐藏文件全部显示出来

    win+R => cmd=>attrib -s -b *.*  /S /D 找出所有隐藏文件夹—— FindHidden

  2. SQL Server中查询某个数据库中表的个数

    --SQL Server中 数表: SELECT * FROM SYSOBJECTS WHERE xtype = 'U'; SELECT COUNT(*) FROM SYSOBJECTS WHERE ...

  3. c++ 基础一

    // my first program in C++ #include <iostream.h> using namespace std; int main() { cout <&l ...

  4. Multiple View Geometry in Computer vision 1.1节部分翻译

    1.1简介—无处不在的投影几何 我们都熟悉射影变换.当我们看一幅图,我们看到的方形不是方形,或圆形不是圆形.平面立体映射到图片上的变换是一个投影变换的例子. 因此投影变换时保留的几何属性是什么呢?当然 ...

  5. QImage::drawRect 和 fillRect在处理大面积区域时代价高昂

    项目需要生成一张掩码图, 出于操作pixel方便的考虑采用QImage(mono), 但在实现一个类似于 cvZero的操作时发现在图片面积较大时效率很低, 提醒一下 ps: 后来是改变策略, 用偏移 ...

  6. 为什么 input 元素能用 width 属性

    前几天在是写网页的时候发现input可以设置宽高,很疑惑,上网查了之后发现: 简单的认为 input 就是 inline 元素是片面的.元素默认以何种 display 属性值显示出来,这个其实更多的时 ...

  7. MVC 请求处理流程(一)

    路由系统先获取路由数据,在实现了IHttpModule接口的UrlRoutingModule对象中通过注册HttpApplication的PostResolveRequestCache来解析路由数据并 ...

  8. 13个JavaScript图表(JS图表)图形绘制插件【转】

    现在网络上又有越来越多的免费的(JS 图表)JavaScript图表图形绘制插件.我之前给一家网站做过复杂的图形,我们用的是 highchart.在那段时间,没有很多可供选择的插件.但现在不同了,很容 ...

  9. 基于eclipse-java的平台上搭建安卓开发环境

    首先感谢好人的分享!http://www.mamicode.com/info-detail-516839.html 系统:windows 7 若想直接安装eclipse—android的,请启动如下传 ...

  10. Eclipse/JavaWeb (三)三大框架之Spring框架 持续更新中...

    (一)发展历史 现在我们有三个层了,可是每层之间的调用是怎样的呢?比如显示层的struts需要调用一个业务类,就需要new一个业务类出来,然后使用:业务层需要调用持久层的类,也需要new一个持久层类出 ...