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/

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

  • 相关阅读:
    Let the Balloon Rise
    Andy's First Dictionary
    myschool 1204
    vector容器
    766A Mahmoud and Longest Uncommon Subsequence
    python全栈开发-logging模块(日记专用)
    python全栈开发- day14列表推导式、生成器表达式、模块基础
    python全栈开发-Day13 内置函数
    python全栈开发-Day12 三元表达式、函数递归、匿名函数
    python全栈开发-Day11 迭代器、生成器、面向过程编程
  • 原文地址:https://www.cnblogs.com/perfe/p/6185577.html
Copyright © 2011-2022 走看看