在持续集成过程中,开发人员将代码提交到共享存储库。使用Jenkins等工具的自动构建系统定期或基于预定义的触发器构建和测试每个提交,并集成代码。你可以运行一个Polyspace®分析是这个过程的一部分。
本主题提供了使用Polyspace Bug Finder™服务器™并将结果上传到Polyspace Access网络界面以供审查。脚本还向潜在的审阅者发送电子邮件通知。收到通知的审核人员可以登录到Polyspace Access web界面(如果他们有Polyspace Bug Finder Access™许可证),并检查结果。
这些脚本是为特定的开发工具链编写的,但可以很容易地扩展到项目、团队或组织中使用的流程。这些脚本也可以在Jenkins自由式项目中运行。如果您正在使用Jenkins pipeline,请参见用于多空间分析的Jenkins管道脚本示例.
特别是脚本:
在Linux上运行®只有
这些脚本使用一些特定于linux的命令,例如出口
.然而,这些命令并不是Polyspace工作流的组成部分。如果你写Windows®脚本(。bat
文件),使用等价的Windows命令代替。
安装Polyspace插件后才能使用Jenkins。
这些脚本以以下两种方式为Jenkins插件设计:
脚本使用辅助函数ps_helper美元
和ps_helper_access美元
对于简单的脚本。helper函数导出电子邮件附件的Polyspace结果,并使用命令行实用工具过滤结果。
这些助手函数仅适用于Jenkins插件。但是,底层命令带有Polyspace Bug查找服务器安装。在Jenkins以外的构建自动化工具上,可以使用polyspace-report-generator
命令或polyspace-access
命令(出口
选项)。看见用Polyspace Bug查找服务器结果发送电子邮件通知.
如果在Jenkins中执行分布式构建,则插件必须安装在主节点和执行Polyspace分析的代理节点的相同操作系统中的相同文件夹中。否则,不能使用helper函数。
这些脚本为电子邮件附件创建文本文件,为个性化电子邮件创建邮件主题和正文。如果您在Jenkins中安装了Polyspace插件,则可以在您的Jenkins项目中使用电子邮件插件的扩展。电子邮件插件允许您轻松发送个性化的电子邮件与先前创建的主题,主体和附件。如果没有Polyspace插件,您必须找到另一种发送电子邮件的方法。
运行Bug Finder分析。
脚本在演示示例上运行Bug FinderBug\u Finder\u示例
.如果您安装了产品Polyspace Bug查找服务器,包含演示示例的文件夹为
.在这里,polyspaceserverroot
/ polyspace / / cxx / Bug_Finder_Example例子
是Polyspace Server产品的安装文件夹,例如,下载188bet金宝搏polyspaceserverroot
/usr/local/Polyspace服务器/ R2019a /
.
您可以很容易地修改脚本以运行代码验证程序。取代polyspace bug finder服务器
与polyspace-code-prover-server
.您可以使用演示示例Code_Prover_Example
专门针对代码验证程序。
要在服务器上运行Polyspace分析并在Polyspace Access web界面中查看结果,必须执行一次性设置。
要运行分析,必须安装一个Polyspace Server产品实例。
要上载结果,必须设置托管Polyspace Access web界面所需的组件。
要查看上传的结果,您(以及检查结果的每个开发人员)必须拥有一个Polyspace许可证。
类似的要求适用于aPolyspace代码验证™服务器分析。
看见安装Polyspace服务器和Access产品下载188bet金宝搏.
要安装Polyspace插件,请在Jenkins界面中选择管理詹金斯在左边。选择管理插件.搜索Polyspace插件,然后下载并安装插件。
下面的步骤概述了如何在安装Polyspace插件后在Jenkins中设置一个Polyspace分析。注意,这些步骤参考Jenkins版本2.150.1。Jenkins版本和Polyspace插件安装的步骤可能略有不同。
如果您使用不同的构建自动化工具,则可以执行类似的设置步骤。
指定包含Polyspace命令的文件夹的完整路径,以及承载Polyspace Access web界面的服务器的主机名和端口号。在您指定路径之后,在脚本中,您不必使用命令的完整路径或服务器详细信息来上传结果。
在Jenkins界面中,选择管理詹金斯在左边。选择配置系统.
在Polyspace节中,指定以下内容:
多边形空间命令的路径。
路径指的是
,在那里polyspaceserverroot
/ polyspace / bin
是Polyspace Server产品的安装文件夹,例如,下载188bet金宝搏polyspaceserverroot
/usr/local/Polyspace服务器/ R2019a /
.
主机名、端口号和协议(http
或https
)由托管Polyspace Access web界面的服务器使用。
这个的名字字段允许您定义一个方便的简写,稍后将在Jenkins项目中使用。
在电子邮件通知节中,指定公司的SMTP服务器(以及发送电子邮件所需的其他详细信息)。
当您创建Jenkins项目(例如,Freestyle项目)时,您可以通过前面定义的全局简写引用Polyspace路径。
要创建用于运行Polyspace的Jenkins项目,请执行以下操作:
在Jenkins界面中,选择新项目在左边。选择自由泳项目.
在构建环境部分,输入前面定义的两个简写名称:
包含Polyspace命令的文件夹路径的名称
承载Polyspace Access web界面的服务器的详细名称。
另外,输入一个登录名和密码,用于上传到Polyspace Access web界面。登录名和密码必须与Polyspace Bug查找器访问许可证
在构建部分中,您可以输入使用Polyspace命令的脚本和承载Polyspace Access web界面的服务器的详细信息。
脚本运行一个Polyspace分析,并将结果上传到Polyspace Access web界面。
在Post-build行动部分中,配置分析后要发送的电子邮件地址和附件。
此脚本运行Bug Finder分析,上传结果并导出对公共通知电子邮件有很大影响的缺陷给所有收件人。
该脚本假设当前文件夹包含一个文件夹来源
与.c
文件。否则修改行gcc / * . c - c来源
与源代码的完整路径。
设置- e导出结果= ResultBF出口食物= Bug_Finder_Example出口PARENT_PROJECT = /公共/ BugFinderExample_PRS_01 # ================================================================ # 跟踪构建命令并创建一个选项文件build_cmd =“gcc / * . c - c来源”polyspace-configure \ -allow-overwrite \ -allow-build-error \掠夺食物\也只是美元jenkins \ -output-options-file $PROG。psopts \ build_cmd美元 # ================================================================ # 在选项文件上运行错误发现者polyspace-bug-finder-server选项文件$掠夺。psopts -results-dir美元的结果 # ================================================================ # 上传结果Polyspace访问web界面美元ps_helper_access创建项目PARENT_PROJECT ps_helper_access美元\上传结果美元\父项目PARENT_PROJECT \项目美元掠夺 # ================================================================$ps_helper_access \ -export $PARENT_PROJECT/$PROG \ -output Results_Alltsv \缺陷高 # ================================================================ # 完成詹金斯状态退出0 |
脚本运行后,可以创建生成后操作,以向所有具有导出文件的收件人发送电子邮件Results_All.tsv
.
在这个脚本中,ps_helper_access美元
这是polyspace-access
命令,包括指定主机名、端口、登录名和加密密码的选项。其他的polyspace-access
选项被显式地写在脚本中。
此脚本运行以前的Bug Finder分析并上载结果。但是,此脚本与以前的脚本在以下方面有所不同:
该脚本使用run_command
函数,在运行命令时打印消息。该函数帮助从控制台输出确定脚本的哪一部分正在运行。
当导出结果时,脚本为不同的所有者创建一个单独的结果文件。
一个主文件Results_All.tsv
包含所有结果。此文件以电子邮件附件的形式发送给经理。管理器邮件是在构建后步骤中配置的。
如果文件包含超过10个缺陷,则构建状态被认为是失败的。脚本发送一个状态不稳定
在电子邮件通知中。
结果文件Results_Users_userA.tsv
出口的userA
包含来自组编程和影响高的缺陷。
这个结果文件以电子邮件附件的形式发送到userA
.
结果文件Results_Users_userB.tsv
出口的userB
包含函数的缺陷bug_memstdlib ()
.
这个结果文件以电子邮件附件的形式发送到userB
.
将在文件中为经理创建单独的邮件主题mailsubject_manager.txt
为用户和userA
和userB
在文件mailsubject_user_userA.txt
和mailsubject_user_userB.txt
分别地
在文件中为发送给经理的电子邮件创建邮件正文mailbody_manager.txt
.
脚本:
假设当前文件夹包含一个文件夹来源
与.c
文件。
否则,修改行gcc / * . c - c来源
与源代码的完整路径。
假设用户名为userA
和userB
.特别是电子邮件地址userA@companyname.com
和userB@companyname.com
(根据之前配置的用户名和SMTP服务器确定)必须是真实的电子邮件地址。
将用户名替换为真实用户名。
set -e export RESULT=ResultBF export PROG=Bug_Finder_Example export REPORT=Results_List。tsv # ================================================================ # 定义函数来打印消息在运行命令run_command(){# 1美元是消息# $ 2 $ 3…是转储和运行message=$1 shift cat >> mailbody_manager.txt << EOF $(date):消息EOF美元 "$@" } # ================================================================ # 初始化邮件身体猫> mailbody_manager.txt < < EOF亲爱的经理(s)是詹金斯的报告工作$ {JOB_NAME} # $ {BUILD_NUMBER}它包含所有红色缺陷中发现错误发现者EOF #示例项目================================================================ # 跟踪构建命令并创建选项文件build_cmd = " gcc - c来源/ * . c”run_command“跟踪构建命令”,\ polyspace-configure \ -allow-overwrite \ -allow-build-error \学监PROG \也只是詹金斯\ -output-options-file学监美元。psopts \ build_cmd美元 # ================================================================ # 在选项文件上运行错误发现者run_command“运行错误发现者”\ polyspace-bug-finder-server选项文件$掠夺。psopts -results-dir美元的结果 # ================================================================ # 上传结果Polyspace访问web界面run_command“创建项目PARENT_PROJECT美元”\ $ ps_helper_access创建项目美元PARENT_PROJECT run_command PARENT_PROJECT /学监美元“上传”\ ps_helper_access \上传结果美元\父项目$PARENT_PROJECT \ -project $PROG \ -output上传。print_url =$($ps_helper prs_print_projecturl upload.output)输出美元POLYSPACE_ACCESS_URL ) # ================================================================ # 出口报告run_command”出口报告PARENT_PROJECT /美元掠夺”\ ps_helper_access \出口美元PROJECT_RUNID \ \缺陷高美元与产出报告 # ================================================================ # 过滤报告run_command“过滤缺陷报告”\ $ps_helper report_filter \ $REPORT \ Results_All。tsv \ Family Defect \ # ================================================================ # Filter Reports for userA and userB run_command "Filtering Reports for userA: Group=='Programming' and Information=='Impact: High'" \ $ps_helper report_filter \ $REPORT \ Results_Users.tsv \ userA \ Group Programming \ Information "Impact: High" run_command "Filtering Reports for userB: Function=='bug_memstdlib()'" \ $ps_helper report_filter \ $REPORT \ Results_Users.tsv \ userB \ Function "bug_memstdlib()" # ================================================================ # Update Jenkins status # Jenkins build status is unstable when there are more than 10 Defects BUILD_STATUS=$($ps_helper report_status Results_All.tsv 10) # ================================================================ # Update mail body and mail subject NB_FINDINGS_ALL=$($ps_helper report_count_findings Results_All.tsv) NB_FINDINGS_USERA=$($ps_helper report_count_findings Results_Users_userA.tsv) NB_FINDINGS_USERB=$($ps_helper report_count_findings Results_Users_userB.tsv) cat >> mailbody_manager.txt << EOF Number of defects: $NB_FINDINGS_ALL Number of findings owned by userA: $NB_FINDINGS_USERA Number of findings owned by userB: $NB_FINDINGS_USERB All results are uploaded in: $PROJECT_URL Build Status: $BUILD_STATUS EOF cat >> mailsubject_manager.txt << EOF Jenkins for Manager - Polyspace run completed with status $BUILD_STATUS and $NB_FINDINGS_ALL findings EOF for user in userA userB do echo "Jenkins for $user - $($ps_helper report_count_findings Results_Users_$user.tsv)) findings" > mailsubject_user_$user.txt done # ================================================================ # Exit with correct build status [ "$BUILD_STATUS" != "SUCCESS" ] && exit 129 exit 0 |
脚本运行后,您可以创建生成后操作,以使用导出的文件向管理员发送电子邮件Results_All.tsv
. 在中指定电子邮件地址收件人字段中,电子邮件主题邮件主题字段和电子邮件正文邮件的身体字段。
此外,还会发送一封单独的电子邮件给userA
和userB
与文件Results_Users_userA.tsv
和Results_Users_userB.tsv
在附件(和内容mailsubject_user_userA.txt
和mailsubject_user_userB.txt
作为邮件主题)。电子邮件地址是userA@companyname.com
和userB@companyname.com
(根据之前配置的用户名和SMTP服务器确定)。
该脚本使用helper函数ps_helper美元
根据分组、影响和功能筛选结果。helper函数使用命令行实用工具来过滤主文件中的结果,并执行一些操作,例如为每个所有者创建一个单独的结果文件。该函数将这些动作作为参数:
report_filter
:根据文本文件的内容过滤导出的文本文件的结果。
例如:
$ps_helper report_filter \ Results_List。tsv \ Results_Users。tsv \ userA \ Group Programming \ Information "Impact: High"
Results_List.tsv
并写入文件Results_Users_userA.tsv
.的文本文件Results_List.tsv
包含的列团体
和信息
.只有那些行团体
列编程
和信息
列影响:高
都会写入到文件中Results_Users_userA.tsv
.report_status
:返回不稳定
或成功
根据文件中结果的数量。
例如:
BUILD_STATUS = $(美元ps_helper report_status Results_All。tsv 10))
不稳定
如果文件Results_All.tsv
包含超过10个结果(10行)。report_count_findings
:报告文件中结果的数量。
例如:
NB_FINDINGS_ALL = $(美元ps_helper report_count_findings Results_All.tsv)
Results_All.tsv
.prs_print_projecturl
:使用主机名和端口号创建Polyspace Access web界面的URL。
例如:
PROJECT\u URL=$($ps\u helper prs\u print\u projecturl Results\u All.tsv$POLYSPACE\u ACCESS\u URL)
Results_All.tsv
(出口polyspace-access
命令),并提取Polyspace Access web界面的URLPOLYSPACE_ACCESS_URL美元
中当前项目的URLPROJECT_URL美元
.polyspace-access
|polyspace bug finder服务器
|polyspace-configure
|polyspace-report-generator
|polyspace-code-prover-server
(Polyspace代码验证服务器)