主要内容

示例脚本Polyspace分析与詹金斯

在持续集成过程中,开发人员将代码提交到共享存储库。使用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例子.在这里,polyspaceserverroot是Polyspace Server产品的安装文件夹,例如,下载188bet金宝搏/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詹金斯的插件

下面的步骤概述了如何在安装Polyspace插件后在Jenkins中设置一个Polyspace分析。注意,这些步骤参考Jenkins版本2.150.1。Jenkins版本和Polyspace插件安装的步骤可能略有不同。

如果您使用不同的构建自动化工具,则可以执行类似的设置步骤。

指定指向的路径Polyspace命令和服务器详细信息Polyspace访问Web界面

指定包含Polyspace命令的文件夹的完整路径,以及承载Polyspace Access web界面的服务器的主机名和端口号。在您指定路径之后,在脚本中,您不必使用命令的完整路径或服务器详细信息来上传结果。

  1. 在Jenkins界面中,选择管理詹金斯在左边。选择配置系统

  2. Polyspace节中,指定以下内容:

    • 多边形空间命令的路径。

      路径指的是polyspaceserverroot/ polyspace / bin,在那里polyspaceserverroot是Polyspace Server产品的安装文件夹,例如,下载188bet金宝搏/usr/local/Polyspace服务器/ R2019a /

    • 主机名、端口号和协议(httphttps)由托管Polyspace Access web界面的服务器使用。

    这个的名字字段允许您定义一个方便的简写,稍后将在Jenkins项目中使用。

  3. 电子邮件通知节中,指定公司的SMTP服务器(以及发送电子邮件所需的其他详细信息)。

创建运行Polyspace的Jenkins项目

当您创建Jenkins项目(例如,Freestyle项目)时,您可以通过前面定义的全局简写引用Polyspace路径。

要创建用于运行Polyspace的Jenkins项目,请执行以下操作:

  1. 在Jenkins界面中,选择新项目在左边。选择自由泳项目

  2. 构建环境部分,输入前面定义的两个简写名称:

    • 包含Polyspace命令的文件夹路径的名称

    • 承载Polyspace Access web界面的服务器的详细名称。

    另外,输入一个登录名和密码,用于上传到Polyspace Access web界面。登录名和密码必须与Polyspace Bug查找器访问许可证

  3. 构建部分中,您可以输入使用Polyspace命令的脚本和承载Polyspace Access web界面的服务器的详细信息。

    脚本运行一个Polyspace分析,并将结果上传到Polyspace Access web界面。

  4. Post-build行动部分中,配置分析后要发送的电子邮件地址和附件。

运行Bug查找器,上传结果和发送常见通知的脚本

此脚本运行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查找器,上传结果和发送个性化通知

此脚本运行以前的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为用户和userAuserB在文件mailsubject_user_userA.txtmailsubject_user_userB.txt分别地

    在文件中为发送给经理的电子邮件创建邮件正文mailbody_manager.txt

脚本:

  • 假设当前文件夹包含一个文件夹来源.c文件。

    否则,修改行gcc / * . c - c来源与源代码的完整路径。

  • 假设用户名为userAuserB.特别是电子邮件地址userA@companyname.comuserB@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. 在中指定电子邮件地址收件人字段中,电子邮件主题邮件主题字段和电子邮件正文邮件的身体字段。

此外,还会发送一封单独的电子邮件给userAuserB与文件Results_Users_userA.tsvResults_Users_userB.tsv在附件(和内容mailsubject_user_userA.txtmailsubject_user_userB.txt作为邮件主题)。电子邮件地址是userA@companyname.comuserB@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代码验证服务器)

相关的话题