LDRA Testbed软件静态分析_Jenkins持续集成_(2)配置邮件自动发送静态分析结果

news2024/10/5 16:26:47

系列文章目录

LDRA Testbed软件静态分析_操作指南
LDRA Testbed软件静态分析_自动提取静态分析数据生成文档
LDRA Testbed软件静态分析_Jenkins持续集成_(1)自动进行静态分析的环境搭建
LDRA Testbed软件静态分析_Jenkins持续集成_(2)配置邮件自动发送静态分析结果
LDRA Testbed软件静态分析_软件质量度量
LDRA Testbed软件静态分析_常见问题及处理
LDRA Testbed软件单元测试_操作指南
LDRA Testbed软件单元测试_常见问题及处理
LDRA Testbed软件集成测试_操作指南
LDRA Testbed软件集成测试_常见问题及处理
粉丝问题解答系列文章… …
其他持续更新中… …


文章目录

  • 系列文章目录
  • 前言
  • 一、开通邮箱SMTP服务
  • 二、安装Email Extension插件
  • 三、Jenkins系统设置
    • 1.Jenkins Location
    • 2.Extended E-mail Notification
    • 3.邮件通知
  • 四、Jenkins工程配置
  • 五、效果展示
  • 总结


前言

上一篇文章《LDRA Testbed软件静态分析_Jenkins持续集成_(1)自动进行静态分析的环境搭建》中已经讲了如何通过Jenkins+Git+Testbed搭建自动进行软件静态分析的持续集成环境,在这个基础上,本篇文章继续进行延申,讲解如何在Jenkins上配置用邮件自动将静态分析报告发送给相关人员,确保相关人员能第一时间得到静态分析结果。


一、开通邮箱SMTP服务

以QQ邮箱为例,在邮箱的“设置”中找到“POP3/IMAP/SMTP/Exchange/CardDAV/CalDAV服务”,开启服务后,将获取到的授权码复制保存下来。
在这里插入图片描述

二、安装Email Extension插件

在Jenkins的插件管理中,确认是否已安装Email Extension(安装Jenkins时,如果选择了安装推荐的插件,一般默认会装上此插件),如果未安装,则搜索Email Extension进行安装即可(安装后记得勾选重启Jenkins)。
在这里插入图片描述

三、Jenkins系统设置

1.Jenkins Location

在Jenkins的系统设置中的Jenkins Location处,设置系统管理员的邮件地址(即第一步中准备用于自动发送邮件的邮箱地址):
在这里插入图片描述

2.Extended E-mail Notification

在Jenkins的系统设置中的Extended E-mail Notification处,设置SMTP服务器为smtp.qq.com,SMTP Port为465,在“高级设置”中添加凭证,勾选SSL协议:
在这里插入图片描述
在点击上图“添加”按钮弹出的窗口中,选择凭证类型为“Username with password”,用户名输入完整的邮箱地址,密码输入第一步中获取到的授权码(注意不是邮箱的登录密码):
在这里插入图片描述
参照下图设置默认的邮箱后缀名(识别到用户名后,默认会添加这个作为邮箱后缀)、默认的编码格式为UTF-8、默认的邮件内容格式为HTML、默认的收件人(有多个收件人时用“,”分割;如果要抄送邮件,在邮箱地址前面加“cc:”):
在这里插入图片描述
在Default Content中设置默认的邮件内容,这个可以在网上找到后多模板,这里仅提供一种作为参考:
在这里插入图片描述

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>${PROJECT_NAME}-第${BUILD_NUMBER}次构建日志</title>
</head>
 
<body leftmargin="8" marginwidth="0" topmargin="8" marginheight="4"
    offset="0">
    <table width="95%" cellpadding="0" cellspacing="0"
        style="font-size: 11pt; font-family: Tahoma, Arial, Helvetica, sans-serif">
        <tr>
            <td>(本邮件是程序自动下发的,请勿回复!)<br/></td>
        </tr>
        <tr>
            <td>附件为本次软件版本的静态分析结果,请注意查收,并及时分析整改!<br/></td>
        </tr>
        <tr>
            <td><h2>
                    <font color="#0000FF">构建结果 - ${BUILD_STATUS}</font>
                </h2></td>
        </tr>
        <tr>
            <td><br />
            <b><font color="#0B610B">构建信息</font></b>
            <hr size="2" width="100%" align="center" /></td>
        </tr>
        <tr>
            <td>
                <ul>
                    <li>项目名称 : ${PROJECT_NAME}</li>
                    <li>构建编号 : 第${BUILD_NUMBER}次构建</li>
                    <li>触发原因: ${CAUSE}</li>
                    <li>构建日志: <a href="${BUILD_URL}console">${BUILD_URL}console</a></li>
                    <li>构建  Url : <a href="${BUILD_URL}">${BUILD_URL}</a></li>
                    <li>工作目录 : <a href="${PROJECT_URL}ws">${PROJECT_URL}ws</a></li>
                    <li>项目  Url : <a href="${PROJECT_URL}">${PROJECT_URL}</a></li>
                </ul>
            </td>
        </tr>
        <tr>
            <td><b><font color="#0B610B">Changes Since Last Successful Build:</font></b>
            <hr size="2" width="100%" align="center" /></td>
        </tr>
        <tr>
            <td>
                <ul>
                    <li>历史变更记录 : <a href="${PROJECT_URL}changes">${PROJECT_URL}changes</a></li>
                </ul> ${CHANGES_SINCE_LAST_SUCCESS,reverse=true, format="Changes for Build #%n:<br />%c<br />",showPaths=true,changesFormat="<pre>[%a]<br />%m</pre>",pathFormat="    %p"}
            </td>
        </tr>
        <tr>
            <td> <hr size="2" width="100%" align="center" /></td>
        </tr>
        <tr>
            <td></td>
        </tr>
        <tr>
            <td><b><font color="#0B610B">构建情况总览:</font></b>${TEST_COUNTS,var="fail"}<br/>
            <hr size="2" width="100%" align="center" /></td>
        </tr>
        <tr>
            <td><textarea cols="80" rows="30" readonly="readonly"
                    style="font-family: Courier New">${BUILD_LOG,maxLines=23}</textarea>
            </td>
        </tr>
    </table>
</body>
</html>

接着往下,勾选“Allow sending to unregistered users”意味着允许向未注册的用户发送邮件。比如Jenkins通过git获取到用户zhang_san提交了软件版本,在完成构建后本来应该向zhang_san发送邮件,但是若zhang_san这个账户此前未在Jenkins上注册,如果没有勾选“Allow sending to unregistered users”,则不会向其发送邮件,并给出提示“Not sending mail to unregistered user (id: zhang_san, email: zhang_san @qq.com) because your SCM claimed this was associated with a user ID ‘zhang_san’ which your security realm does not recognize; you may need changes in your SCM plugin”,如果勾选了“Allow sending to unregistered users”,则会发送邮件,邮件地址为用户名+此前配置的默认邮箱后缀名,如zhang_san @qq.com。
在“Default Triggers”中选择默认的触发邮件方式,比如我这里选择的always代表不管构建结果如何都发送邮件,你也可以选择只在构建成功或者失败时发送。
在这里插入图片描述

3.邮件通知

在Jenkins的系统设置中的“邮件通知”处,进行如下设置:
参照下图设置SMTP服务器为smtp.qq.com,根据情况设置用户默认邮件后缀。勾选SMTP认证,并设置第一步中用于发送邮件的邮箱地址和授权码(注意不是邮箱的登录密码),勾选SSL协议:
在这里插入图片描述
设置SMTP端口为465,邮件的回复地址与用于自动发件的系统邮箱设置为一致,字符集设置为UTF-8:
在这里插入图片描述
完成以上配置后,可以在下方勾选“通过发送测试邮件测试配置”,填写一个邮箱发送邮件测试:
在这里插入图片描述
在这里插入图片描述
如果发送测试邮件失败,大概率是以下两种原因:
1、系统管理员的邮箱地址未正确设置,应设置为获得了SMTP授权的邮箱;
2、前面的SMTP认证凭证没设置对,记住用户名为邮箱地址,密码为SMTP的授权码,而不是邮箱登录密码。

四、Jenkins工程配置

上一篇文章已经讲了如何创建Jenkins工程,配置git,配置testbed静态分析,这里就不从头开始讲了,接着后面的步骤讲。
在这里插入图片描述
在构建后操作中,在生成testbed静态分析报告之后,再增加一个构建后的操作步骤,选择E-mail Notification:
在这里插入图片描述
如下选项都保持默认配置(默认配置在之前系统设置中都已经设置好了):
在这里插入图片描述
“Attachments”这里可以设置邮件的附件,支持通配符,通过路径和文件名指定附件;“Attach Build Log”可以选择是否要将构建的控制台输出信息作为附件进行发送(可以打压缩包):
在这里插入图片描述
以下配置也是保持默认:
在这里插入图片描述
点击“Add Triggers”选择触发邮件发送的场景,比如此次选择always:
在这里插入图片描述
默认会对git版本的提交者(即developers)和手动设置的收件人列表(即recipient list)发送邮件,你也可以选择其他的人员:
在这里插入图片描述
在下面的“高级”设置中,有一些和上面相同的配置,在这里设置会覆盖之前的默认配置,可以根据自己的实际需求进行配置,或者保持默认:
在这里插入图片描述
完成以上配置后,点击保存即可。

五、效果展示

完成以上所有配置后,当这个工程配置的git链接有更新时,首先进行上一篇文章中配置的自动进行testbed静态分析,并生成出静态分析报告,然后触发执行今天配置的邮件发送功能,自动给配置的相关人员发送邮件提醒,效果如下:
在这里插入图片描述
在这里插入图片描述


总结

以上就是在Jenkins中配置邮件自动发送静态分析结果的操作说明,至此,通过这几篇文章,目前已基本做到了软件静态分析的全过程自动化(提交代码->自动触发静态分析->自动触发邮件发送静态分析结果->自动提取数据生成报告文档)。希望对大家有所帮助,如有疑问可以评论或私信交流。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1428543.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

10 排序的概念

目录 1.排序的概念和运用 2.排序的分类 1. 排序的概念及运用 1.1 排序的概念 排序: 所谓排序&#xff0c;就是使一串记录&#xff0c;按照其中的某个或某些关键字的大小&#xff0c;递增或递减的排列起来的操作 稳定性&#xff1a;假定在待排序的记录序列中&#xff0c;存在…

微调实操一: 增量预训练(Pretraining)

1、前言 《微调入门篇:大模型微调的理论学习》我们对大模型微调理论有了基本了解,这篇结合我们现实中常见的场景,进行大模型微调实操部分的了解和学习,之前我有写过类似的文章《实践篇:大模型微调增量预训练实践(二)》利用的MedicalGPT的源码在colab进行操作, 由于MedicalGPT代…

编译Duilib库

编译Duilib&#xff0c;遇到几个错误&#xff1b; 最终生成的lib如下&#xff1b; 报一个错误&#xff0c;无法打开源文件"StdAfx.h"&#xff0c; 查了一下资料&#xff0c;反正我的在下图 C/C - 常规 - 附加包含目录&#xff0c;填入下图内容就可以了&#xff0c;这…

还在用findViewById,不来了解下其它方式?

众所周知&#xff0c;都2225年了&#xff0c;如果你还在用Java敲安卓代码&#xff0c;findViewById已经是一种非常繁琐的操作&#xff0c;如果要去获取的id数量多&#xff0c;则对开发更加不友好。如果一个页面id过多&#xff0c;经常会有如下场景&#xff1a; TextView title…

100 C++内存高级话题 new 细节探秘,重载类内 operator new ,delete

一 new 内存分配细节探秘 我们以分配10个char为例&#xff0c;说明&#xff0c;观察内存发现&#xff0c;当delete 的时候&#xff0c;实际上很多内存都改变了。 实际上 new 内存不是一个简单的事情。为了记录和管理分配出去的内存&#xff0c;额外分配了不少内存&#xff0c;…

clickhouse行转列的转换

1、原表select * from test 2、一个人的每个科目作为一行记录 改为一个人的所有科目作为一行记录 方式1 select name, sum(case when subject‘语文’ then score else 0 end) as chinese, sum(case when subject‘数学’ then score else 0 end) as math from test group by …

Redis学习——高级篇⑨

Redis学习——高级篇⑨ Redis7高级之Redlock算法和Redisson的使用&#xff08;十&#xff09; 10.1 Redlock 红锁算法1.解决手写分布式锁的单点故障问题2.设计理念3. 解决方案 10.2 Redisson进行代码改造10.3 多机案例&#xff08;解决单点故障&#xff09;10.4 R…

线性代数:矩阵的秩

目录 一、矩阵的子式 二、矩阵的秩 三、重要性质定理推论 一、矩阵的子式 二、矩阵的秩 三、重要性质定理推论

Linux多线程服务端编程:使用muduo C++网络库 学习笔记 第十一章 反思C++面向对象与虚函数(下)

11.7.2 值语义与生命期 值语义的一个巨大好处是生命期管理很简单&#xff0c;就跟int一样——你不需要操心int的生命期。值语义的对象要么是stack object&#xff0c;要么直接作为其他object的成员&#xff0c;因此我们不用担心它的生命期&#xff08;一个函数使用自己stack上…

TryHackMe-File Inclusion练习

本文相关的TryHackMe实验房间链接&#xff1a;TryHackMe | Why Subscribe 路径遍历(目录遍历) LocationDescription/etc/issue包含要在登录提示之前打印的消息或系统标识。/etc/profile控制系统范围的默认变量&#xff0c;例如导出&#xff08;Export&#xff09;变量、文件创…

纯国产,3款黑科技软件,被误认为外国佬开发

闲话不多说&#xff0c;直接为大家推荐三款实用工具。 1、知犀思维导图 这款国产的思维导图工具&#xff0c;堪称业界的良心之选。它不仅能捕捉你每一个稍纵即逝的灵感&#xff0c;而且界面简洁、操作轻松。无论是团队协作、灵感记录、规划制定&#xff0c;还是日常笔记&…

jenkins添加linux节点

jenkins添加linux节点并创建任务_创建linux jenkins结点-CSDN博客文章浏览阅读1.1k次。jenkins添加linux节点并创建任务_创建linux jenkins结点https://blog.csdn.net/qq_32828053/article/details/128905581

加速知识检索:伯克利DeepMind联合研究,RaLMSpec让语言模型服务飞速提升2-7倍!

近年来&#xff0c;随着大型语言模型&#xff08;LLM&#xff09;的出现&#xff0c;在多样化的 NLP 任务上取得了令人瞩目的成果。然而&#xff0c;知识密集型任务仍是 NLP 领域中的一项挑战&#xff0c;因为这些任务不仅要求模型要理解和生成自然语言&#xff0c;还要能够访问…

【论文笔记】Multi-Chain Reasoning:对多思维链进行元推理

目录 写在前面1. 摘要2. 相关知识3. MCR方法3.1 生成推理链3.2 基于推理链的推理 4. 实验4.1 实验设置4.2 实验结果 5. 提及文献 写在前面 文章标题&#xff1a;Answering Questions by Meta-Reasoning over Multiple Chains of Thought论文链接&#xff1a;【1】代码链接&…

江科大stm32学习笔记11——旋转编码器计次

一、接线 旋转编码器&#xff0c;旋钮会不断接触断开触点产生电波。 由于两个电波之间相差90&#xff0c;即为正交波&#xff0c;一个电波处于高电平时另一个处于低电平&#xff0c;所以可以用来判断旋转方向。 二、代码 复制粘贴4-1的工程文件&#xff0c;重命名为“5-2 旋转…

Could not resolve host: github.com问题解决

git clone的时候发现机器无法解析github.com&#xff0c;其实应该改用ssh协议去clone&#xff0c;但是我用的是公用的机器&#xff0c;密钥对一直没配置好&#xff0c;所以也就堵死了。那么如果想让机器能解析github.com&#xff0c;&#xff08;机器本身没有ping命令&#xff…

深度学习入门笔记(五)前馈网络与反向传播

接着上一节,本节讲解模型自我学习的数学计算过程究竟是怎么样的。 5.1 前馈网络 一个最简单的前馈神经网络如图所示,对于每一个隐藏层,输入对应前一层每一个节点权重乘以节点输出值,输出则是经过激活函数(例如sigmoid函数)计算后的值。 在这样的网络中,输入的数据 x 经…

数据结构—基础知识(16):哈夫曼编码

数据结构—基础知识&#xff08;16&#xff09;&#xff1a;哈夫曼编码 哈夫曼编码的主要思想 在进行数据压缩时&#xff0c;为了使压缩后的数据文件尽可能短&#xff0c;可采用不定长编码。其基本思想是&#xff1a;为出现次数较多的字符编以较短的编码。为确保对数据文件进…

一、创建Vue3项目

1. 下载 node.js 下载地址&#xff1a;https://nodejs.org/zh-cn 优先选择 16 版本; node -v || node -version 可以检查本地 node.js 版本 2. 设置淘宝镜像源 npm config set registry https://registry.npmmirror.com/ 设置淘宝镜像源 npm config get registry 查看当前镜像…

【GitHub项目推荐--一款100% 开源的物联网开发平台,匹配智慧城市、智能家居和能源管理】【转载】

OpenRemote 一款100% 开源 - 集成您的设备、创建规则以及分析和可视化您的数据的物联网设备管理平台 github地址&#xff1a; https://github.com/openremote/openremote 国内源代码&#xff1a; http://www.gitpp.com/pythonking/openremote OpenRemote 的介绍 OpenRemo…