zoukankan      html  css  js  c++  java
  • 【python】jiraAPI使用教程 自动创建jira问题单并置状态为OPEN

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

      

       

    作者:苏徽.W

    出处:http://www.cnblogs.com/perfe/

    本文版权归作者和博客园共有,欢迎转载,希望大家能够多多评论交流哦。

  • 相关阅读:
    mac zsh
    lldb
    c++ 的整形字面值和如何确定常量类型
    Python GTK + 3教程 学习笔记 ——(7)GTK的UI设计理念
    Python GTK + 3教程 学习笔记 ——(6)gnome-tewak-tool代码学习
    c++ 一些资料
    解决github无法加载图片
    Python GTK + 3教程 学习笔记 ——(5)布局 与 glade
    wp rest api 授权方法步骤(使用JWT Authentication插件)
    解决Ionic的ion-slide-box 2条数据渲染问题
  • 原文地址:https://www.cnblogs.com/perfe/p/6185577.html
Copyright © 2011-2022 走看看