jirabug统计消息推送到飞书

需求背景:

故事上线前,需要每日下班前进行bug统计,发送到飞书群

实现效果:

通过Jenkins定时构建,统计当日新增未解决bug、当前未解决bug、待测试bug、当前bug总数,触发飞书机器人发送相关信息到项目群中,点击bug数量可跳转到jira

代码结构:

import os
import requests
from jira import JIRA
from urllib.parse import quote

class storyBugCounts:
    # 故事bug统计
    def __init__(self, jira_server, jira_user, jira_pwd, issue_key=os.environ['issue_key'], feishu_url=os.environ['feishu_url']):
        self.jira_server=jira_server
        self.jira_user=jira_user
        self.jira_pwd=jira_pwd
        self.jira_object=JIRA(self.jira_server,auth=(self.jira_user,self.jira_pwd)) #登录
        self.issue_key = issue_key
        self.feishu_url = feishu_url
    def new_bugs_count(self):
        """
        今日新增未解决bug统计
        :return:
        """
        query = f'issue in linkedIssues({self.issue_key},"is blocked by") and issuetype = 缺陷 and status in (重新打开, 待办, 开发) and created >= -12h'
        all_bug = len(self.jira_object.search_issues(query))
        # 对 URL 进行编码
        encoded_url = quote(query)
        bug_href = '{0}/issues/?filter=-4&jql={1}'.format(self.jira_server, encoded_url)
        return [all_bug, bug_href]

    def unsolved_bugs_count(self):
        """
        未解决bug统计
        :return:
        """

        '''
        # 通过issue获取bug数据
        issue = self.jira_object.issue(self.issue_key)
        unsolved_bugs = [issuelinks.id for issuelinks in issue.fields.issuelinks if issuelinks.inwardIssue.fields.status.name in ('待办','重新打开','开发')]
        num_unsolved_bugs=len(unsolved_bugs)
        '''

        # 通过jql获取bug数据
        query = f'issue in linkedIssues({self.issue_key},"is blocked by") and issuetype = 缺陷 and status in (重新打开, 待办, 开发)'
        # bug数量
        all_bugs = len(self.jira_object.search_issues(query))
        # 对 URL 进行编码
        encoded_url = quote(query)
        # bug跳转链接
        bug_href = '{0}/issues/?filter=-4&jql={1}'.format(self.jira_server,encoded_url)
        return (all_bugs,bug_href)

    def ready_to_test_bugs_count(self):
        """
        待测试bug总数统计
        :return:
        """
        query = f'issue in linkedIssues({self.issue_key},"is blocked by") and issuetype = 缺陷 and status = 待测试'
        all_bug = len(self.jira_object.search_issues(query))
        # 对 URL 进行编码
        encoded_url = quote(query)
        bug_href = '{0}/issues/?filter=-4&jql={1}'.format(self.jira_server, encoded_url)
        return [all_bug, bug_href]

    def all_bugs_count(self):
        """
        bug总数统计
        :return:
        """
        '''
        # 通过issue获取bug数据
        issue = self.jira_object.issue(self.issue_key)
        all_bugs = [issuelinks.id for issuelinks in issue.fields.issuelinks]
        num_all_bugs=len(all_bugs)
        return (all_bugs,num_all_bugs)
        '''

        query = f'issue in linkedIssues({self.issue_key},"is blocked by") and issuetype = 缺陷'
        all_bug = len(self.jira_object.search_issues(query))
        # 对 URL 进行编码
        encoded_url = quote(query)
        bug_href = '{0}/issues/?filter=-4&jql={1}'.format(self.jira_server, encoded_url)
        return [all_bug, bug_href]

    def feishu_robot(self):
        feishu_url = self.feishu_url
        title = "{0}bug统计".format(self.issue_key)
        res = requests.post(url=feishu_url,
                            headers={'Content-Type': 'application/json'},
                            json={'msg_type': "post",
                                  'content': {"post": {"zh_cn": {
                                      'title': title,
                                      'content': [
                                          [
                                              {"tag": "text", "text": '今日新增未解决bug:'},
                                              {"tag": "a", "href": self.new_bugs_count()[1],
                                               "text": "{0}个".format(self.new_bugs_count()[0])}
                                          ],
                                          [
                                              {"tag": "text", "text": '未解决bug:'},
                                              {"tag": "a", "href": self.unsolved_bugs_count()[1],
                                               "text": "{0}个".format(self.unsolved_bugs_count()[0])}
                                          ],
                                          [
                                              {"tag": "text", "text": '待测试bug:'},
                                              {"tag": "a", "href": self.ready_to_test_bugs_count()[1],
                                               "text": "{0}个".format(self.ready_to_test_bugs_count()[0])}
                                          ],
                                          [
                                              {"tag": "text", "text": 'bug总数:'},
                                              {"tag": "a", "href": self.all_bugs_count()[1],
                                               "text": "{0}个".format(self.all_bugs_count()[0])}
                                           ]
                                      ]
                                  }}}})
        print(res.json())


if __name__ == '__main__':
    jira_server = "https://jira.bg.xxxx"
    jira_user = "xxx"
    jira_pwd = "xxx"
    project = "xxx"
    #feishu_url = "https://open.feishu.cn/xxxx"
    #issue_key = 'xxxx'


    j = storyBugCounts(jira_server=jira_server, jira_user=jira_user, jira_pwd=jira_pwd, issue_key=os.environ['issue_key'],feishu_url=os.environ['feishu_url'])
    n = j.new_bugs_count(), j.unsolved_bugs_count(), j.ready_to_test_bugs_count(), j.all_bugs_count(), j.feishu_robot()
    for bugs in n:
        print(bugs)

添加飞书机器人:

选择飞书群--设置--群机器人--添加机器人--添加自定义机器人

填写机器人名称、描述--点击添加

添加成功后,会生成一个webhook地址,要保管好此地址哦,调用飞书机器人用到的就是这个地址

飞书推送消息的内容、格式可以自己构造,具体参照:自定义机器人使用指南 - 开发指南 - 开发文档 - 飞书开放平台

Jenkins自动构建配置:

使用参数化构建+定时构建+自动拉取gitlab代码

1、新建任务

2、任务配置,添加描述

3、设置构建参数,这些参数脚本中需要引用

4、配置对应工程中的git信息

在Credentials中,点击添加-jenkins,填写jebkins凭据提供者,点击添加

5、定时构建

6、执行shell命令

7、jenkins构建

点击立即构建,构建成功,表示配置成功

参考文档:飞书机器人--jira bug统计消息推送_jira统计bug数据-CSDN博客

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值