• 【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/

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

  • 相关阅读:
    TrendMicro PcCillin 2005卸载密码忘记。
    解决Exchange OWA用户登陆后有的用户文件夹显示中文有的显示英文。
    注册表解锁
    修改Linux Fedora Grup的默认启动系统.
    OfficeXP升级到SP3后outlook出现的恼人的提示。
    在 Outlook 中单击超链接时收到错误信息
    windows sbs 2003的功能限制和其他用法
    今天打了加强型乙肝疫苗。
    WSUS服务器的详细配置和部署转载
    当邮箱存储数据库达到 16 GB 限制时,Exchange Server 2003 邮箱存储无法装入
  • 原文地址:https://www.cnblogs.com/perfe/p/6185577.html
Copyright © 2020-2023  润新知