这个例子展示了如何使用Metrics Dashboard和开源工具GitLab™和Jenkins™在持续集成系统工作流中测试和优化模型。持续集成是将项目文件的所有开发人员工作副本合并到共享主线的实践。这个工作流程通过维护版本控制、自动化和标准化测试来节省时间并提高质量。
此示例引用包含附带项目的项目matlab: sldemo_slproject_airframe你必须提供的这些文件:
一个指定度量阈值和自定义度量仪表板的MATLAB脚本。
一个MATLAB单元测试,它收集度量数据并检查是否有度量阈值违反。
这个示例使用Jenkins持续集成服务器来运行MATLAB单元测试,以确定是否存在度量阈值冲突。Jenkins存档测试结果供您下载并在本地进行调查。GitLab是一个在线的Git存储库管理器,您可以配置它来与Jenkins一起工作。此图显示了Simulink Check、Git金宝appLab和Jenkins如何在持续集成工作流中一起工作。
除了文件matlab: sldemo_slproject_airframe项目,您必须提供以下附加文件:
一个MATLAB单元测试,它为项目收集度量数据,并检查模型文件是否包含度量阈值违反。有关MATLAB单元测试的更多信息,请参见基于脚本的单元测试.
一个指定度量阈值和自定义度量仪表板的MATLAB脚本。有关如何自定义Metrics Dashboard的更多信息,请参见自定义指标仪表板布局和功能.
一个setup.m
文件,该文件激活配置XML文件,这些配置XML文件定义度量阈值、设置自定义度量系列,并自定义度量仪表板布局。对于本例,setup.m
脚本包含以下代码:
函数setup % refresh Model Advisor定制Advisor. manager .refresh_customizations();configFile = fullfile(pwd, 'config', 'MyConfiguration.xml');slmetric.config.setActiveConfiguration (configFile);uiconf = fullfile(pwd, 'config', 'MyDashboardConfiguration.xml');slmetric.dashboard.setActiveConfiguration (uiconf);结束
setup.m
文件。一个sl_customization.m
文件,该文件激活Model Advisor配置文件以定制Model Advisor检查。有关创建自己的Model Advisor配置的更多信息,请参见配置合规指标.
一个运行
脚本,在Jenkins构建期间执行。对于本例,该代码位于run.m
文件:
% script execute during Jenkins build function run(IN_CI) if (IN_CI) Jenkins WORKSPACE = getenv('WORKSPACE');cd (jenkins_workspace);/ /打开sl项目金宝app%执行测试runUnitTest();slproj.close ();if IN_CI exit end结束
一个cleanup.m
将活动度量配置重置为默认配置的文件。对于本例,该代码位于cleanup.m
文件的脚本:
函数清理rmpath(fullfile(pwd, 'data'));Advisor.Manager.refresh_customizations ();%重置active metric配置为默认值;slmetric.dashboard.setActiveConfiguration (");结束
cleanup.m
文件。一个.gitignore
文件,验证派生的工件没有签入到GitLab。这个代码在.gitignore
文件:
/ / * * * * *报告工作。asv * .autosave
创建一个GitLab项目来源代码控制您的项目。有关更多信息,请参见https://docs.gitlab.com/ee/README.html.
安装Git客户端。
建立一个分支工作流。使用GitLab,从主分支创建一个临时分支,用于实现对模型文件的更改。集成工程师可以使用Jenkins测试结果来决定是否将临时分支合并到主分支中。有关更多信息,请参见
https://git-scm.com/book/en/v2/Git-Branching-Branching-Workflows.
下设置>存储库当开发人员想要将他们的更改合并到主分支时,通过强制使用合并请求来保护主分支。
下设置,在集成页面,添加一个webhook到Jenkins项目的URL。这个webhook在Jenkins服务器上触发一个构建作业。
安装GitLab和TAP插件。MATLAB单元测试使用TAP插件将结果流到. tap
文件。为了使测试状态能从MATLAB与Jenkins工作进行通信,Jenkins导入了. tap
文件。
创建一个Jenkins项目。指定这些配置:
在Jenkins项目中,单击配置.
在一般选项卡,指定项目名称。
在源代码管理选项卡,存储库URL字段,指定您的GitLab存储库的URL。
在建立触发器选项卡上,选择当更改被推到GitLab时进行构建.
在构建标签,执行MATLAB调用运行
脚本。的运行
脚本打开项目并运行所有单元测试。对于本例中的项目,代码是:
matlab -nodisplay - r……/var/lib/jenkins/workspace/'18b Metrics CI Demo';(真正的)”
在Post-build行动选项卡,配置TAP插件将TAP结果发布到Jenkins。在测试结果字段中,指定/ * . tap报告
.为文件归档,指定报告/ * * / * *工作
.
TAP插件在工作的扩展结果中显示了MATLAB单元测试的细节。Jenkins归档基础结构保存在Jenkins构建期间生成的派生工件。
在设置项目、Jenkins和GitLab之后,遵循持续集成工作流。
创建GitLab存储库的本地克隆。看到从Git仓库检索文件.
在Si金宝appmulink中,导航到本地GitLab存储库。
创建一个特性分支并获取和检出文件。看到Git分支和合并文件和使用Git拉,推,取文件.
对项目文件进行任何必要的更改。
在仿真数据检查器中模拟模型并验证输出。
运行MATLAB单元测试。有关更多信息,请参见runtests
.
将修改后的模型添加到特性分支并提交。看到Git分支和合并文件和使用Git拉,推,取文件.
将更改推到GitLab存储库。看到Git分支和合并文件和使用Git拉,推,取文件.
在GitLab中,创建一个合并请求。选择特性分支作为源分支,目标分支作为主分支。点击比较分支并继续.
如果该特性没有完全实现,则通过在请求的开头添加字母WIP:将合并请求标记为正在进行的工作。如果合并请求没有标记为WIP:,它将在创建后立即触发构建。
点击提交合并请求.
如果字母WIP:不在合并请求的开头,那么push命令将触发Jenkins构建。在本例的Jenkins Setup部分中,您将Jenkins配置为在将更改推入GitLab时执行构建。要删除这些字母,请单击解决在制品状态.
导航到Jenkins项目。在“生成历史记录”中,可以看到生成状态。
单击建立。
点击利用测试结果.
对于本例,MetricThresholdGateway.m
单元测试没有通过三个指标,因为这些指标没有满足阈值。要研究该数据,必须在本地下载数据。
将存档的结果下载到本地Git存储库工作区。
解压下载的文件。复制报告/
和工作/
文件夹到本地存储库中各自的文件夹。
要查看结果,请打开项目和Metrics Dashboard。
要解决测试失败,请对模型进行必要的更新。将更改推到GitLab的特性分支。
集成工程师可以使用Jenkins测试结果来决定何时可以将临时分支合并到主分支。
slmetric.config.setActiveConfiguration
|slmetric.dashboard.setActiveConfiguration