使用docker部署jenkins并集成allure查看测试报告和历史构建趋势图!含钉钉各类型消息代码!

jenkins多节点集成allure

jenkins多节点配置
解决对docker部署的jenkins增加子节点时遇到的坑

插件管理–安装allure插件
在这里插入图片描述

重要:在开始之前要确保你的master节点已经安装好了allure!!

我这里踩到的一个坑就是因为jenkins master节点用docker进行部署的,所以只在linux子节点服务器上部署了java和allure运行环境,导致jenkins再启动allure服务时,找不到对应的路径。
java和allure的运行环境部署参考

接下来开始正式配置

系统配置–全局工具变量

别名随便起不做要求,这里建议加上allure版本号
在这里插入图片描述
设置完成后点击应用,保存。

配置从节点

在这里插入图片描述

JOB配置

增加构建后操作
在这里插入图片描述
选择高级,继续配置
在这里插入图片描述

构建后触发shell脚本

在这里插入图片描述

# 定义bash格式,很重要!!
#!/bin/bash
# 使环境变量生效,我这边不知道为什么配置的环境变量总是莫名其妙失效了,所以加了这步操作
source /etc/profile
# 对当前构建项目创建python3虚拟环境,如果已创建,则忽略(第二个venv是环境名称)
python3 -m venv venv
# 进入项目虚拟环境
source venv/bin/activate
# 安装依赖
pip install -r requirements.txt
# 执行pytest 
pytest --alluredir ./report/tmp --clean-alluredir
# 输出allure报告
allure generate ./report/tmp -o ./report/report --clean
# 执行发送钉钉脚本
python common/DingDing.py

触发钉钉脚本

import json
import jenkins
import requests
import sys
import os
# 这里有一个坑,在linux使用from...import...语法时,需要加上path路径,否者会报找不到模块异常
object_path = os.path.join(os.path.abspath(os.path.dirname(os.path.dirname(__file__))))
sys.path.append(object_path)
from common.LoggerHandler import logger


jenkins_url = "jenkins地址"
server = jenkins.Jenkins(jenkins_url, username="用户账号", password="用户密码")
job_name = "job名称"
job_url = jenkins_url + job_name
job_last_build_url = server.get_info(job_name)['lastBuild']['url']
report_url = job_last_build_url + 'allure-2.13.0'


def dd_push():
    d = {}
    path = os.path.abspath("../")
    f = open(path + r'xxxxxxxx/prometheusData.txt', 'r')
    logger.info(f'读取路径==={f}===')
    headers = {"Content-Type": "application/json;charset=utf-8"}
    # allure_ip = 'http://' + get_ip() + ':8282'
    # logger.info(f"报告地址===={allure_ip}")
    url = 'https://oapi.dingtalk.com/robot/send?access_token=xxxxxx'
    for lines in f:
        for i in lines:
            launch_name = lines.strip('\n').split(' ')[0]
            num = lines.strip('\n').split(' ')[1]
            d.update({launch_name: num})
    f.close()
    logger.info(f'===文件读取完毕===')
    retries_run = d.get('launch_retries_run')
    logger.info('运行总数:{}'.format(retries_run))
    # print('运行总数:{}'.format(retries_run))
    status_passed = d.get('launch_status_passed')
    logger.info('通过数量:{}'.format(status_passed))
    # print('通过数量:{}'.format(status_passed))
    status_failed = d.get('launch_status_failed')
    logger.info('通过数量:{}'.format(status_failed))
    # print('通过数量:{}'.format(status_failed))
    execute_time = d.get('launch_time_duration')
    logger.info('执行时间:{}'.format(execute_time))
    logger.info(f'===关键字段复制完成,准备发送钉钉===')
    # content里面要设置关键字
    data_info = {
        "msgtype": "text",
        "text": {
            "content":  '测试报告,接口自动化case执行完毕:'
                        "\n本次运行case总数:" + retries_run +
                        "\n本次执行总时长:" + f'{execute_time}ms' +
                        "\n通过case数量:" + status_passed +
                        "\n失败case数量:" + status_failed +
                        "\n构建地址:\n" + job_url +
                        "\n报告地址:\n" + report_url
        },
        "isAtAll": False,
        # 需要@的人
        "at": {"atMobiles": ["xxxxxx"]}
    }
    value = json.dumps(data_info)
    logger.info(f'===钉钉参数组装完成,调用钉钉===')
    response = requests.post(url, data=value, headers=headers)
    logger.info(response.text)
    if response.json()['errmsg'] != 'ok':
        print(response.text)
# 发送markdown格式钉钉消息
data_info = {
        "msgtype": "markdown",
        "markdown": {
            "title": "skr_autotest 测试报告",
            "text": "### skr_autotest 测试报告 \n"
                    f"- **本次执行总时长:**\n{execute_time}ms\n\n"
                    f"- **执行case总数:**\n{retries_run}\n\n"
                    f"- **通过case数量:**\n{status_passed}\n\n"
                    f"- **失败case数量:**\n{status_failed}\n\n"
                    f"- **失败重试次数:**\n{status_failed}\n\n"
                    f"- **详细报告跳转链接:**\n"
                    f"\n>>>[构建地址]({job_url})\n\n"
                    f"\n>>>[报告地址]({report_url})\n\n@xxxx"
        },
        # 需要@的人
        "at": {"atMobiles": ["xxxxx"]}
    }
    value = json.dumps(data_info)
    logger.info(f'===钉钉参数组装完成,调用钉钉===')
    response = requests.post(url, data=value, headers=headers)
    logger.info(response.text)
    if response.json()['errmsg'] != 'ok':
        print(response.text)
# actionCard格式消息
data_info = {
        "msgtype": "actionCard",
        "actionCard": {
            "title": "skr_autotest 测试日报",
            "text": f"skr_autotest {day_time}  巡检日报\n\n"
                    f"![告警图片](http://res-static.inframe.mobi/ui/16723199168274d.png)\n"
                    f"今日巡检次数:\n{day_job_count}\n\n"
                    f"今日执行case次数:\n{day_retries_run}\n\n"
                    f"今日通过case次数:\n{day_passed_count}\n\n"
                    f"今日失败case次数:\n{day_failed_count}\n\n"
                    f"今日失败case重试次数:\n{day_retries_count}\n\n",
            "singleTitle": "报告详情",
            "singleURL": dd_report_url
        },
        # 需要@的人
        "at": {"isAtAll": True}
    }
    value = json.dumps(data_info)
    logger.info(f'send dingding daily report !')
    response = requests.post(url, data=value, headers=headers)
    logger.info(f"dingding response : {response.text}")
    if response.json()['errmsg'] != 'ok':
        print(response.text)

请添加图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值