主要内容

修正持续集成系统工作流中的度量阈值冲突

这个例子展示了如何在开源工具GitLab中使用度量仪表板®和詹金斯®在持续集成系统工作流程中测试和改进您的模型。持续集成是将项目文件的所有开发人员工作副本合并到共享主线的实践。这个工作流通过维护版本控制、自动化和标准化测试来节省时间和提高质量。

此示例引用包含已交付项目的项目matlab: sldemo_slproject_airframe你必须提供以下文件:

  • 一个MATLAB®脚本,指定度量阈值并自定义度量仪表板。

  • 一个MATLAB单元测试,用于收集度量数据并检查是否存在度量阈值违规。

本例使用Jenkins持续集成服务器运行MATLAB单元测试,以确定是否存在违反度量阈值的情况。Jenkins将测试结果存档,供您下载并在本地进行调查。GitLab是一个在线Git™存储库管理器,您可以配置它与Jenkins一起工作。这个图表显示了金宝app®检查™、GitLab和Jenkins在持续集成工作流中一起工作。

与GitLab和Jenkins持续集成的工作流

项目设置

除了文件中的matlab: sldemo_slproject_airframe项目中,您必须提供这些附加文件:

  • 一个MATLAB单元测试,为项目收集度量数据,并检查模型文件是否包含度量阈值违规。有关MATLAB单元测试的详细信息,请参见基于脚本的单元测试

  • 一个MATLAB脚本,用于指定度量阈值并自定义度量仪表板。有关如何自定义度量仪表板的详细信息,请参见自定义指标仪表板布局和功能

  • 一个setup.m文件激活配置XML文件,这些文件定义指标阈值,设置自定义指标族,并自定义指标仪表板布局。对于本例,使用setup.m脚本包含以下代码:

    Model Advisor. manager .refresh_customization ();%设置阈值的度量配置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文件:

    %脚本执行在Jenkins构建函数运行(IN_CI) if (IN_CI) jenkins_workspace = getenv('WORKSPACE');cd (jenkins_workspace);打开sl项目slproj = simulinkproject(pwd)金宝app;%执行测试runUnitTest();slproj.close ();if IN_CI exit end结束

  • 一个cleanup.m将活动度量配置重置为默认配置的文件。对于本例,此代码位于cleanup.m文件的脚本:

    函数清理rmpath(fullfile(pwd, 'data'));Advisor.Manager.refresh_customizations ();% reset active metric configuration to default slmetric.config.setActiveConfiguration(");slmetric.dashboard.setActiveConfiguration (");结束
    项目选项卡上,单击启动关闭.为关闭文件字段,指定cleanup.m文件。

  • 一个.gitignore文件验证派生工件是否被检入GitLab。该代码在.gitignore文件:

    Work /**报告/** *。asv * .autosave

GitLab设置

创建一个用于源代码控制项目的GitLab项目。有关更多信息,请参见https://docs.gitlab.com/ee/index.html

  1. 安装Git客户端。

  2. 设置分支工作流。使用GitLab,从主分支创建一个临时分支来实现对模型文件的更改。集成工程师可以使用Jenkins测试结果来决定是否将临时分支合并到主分支中。有关更多信息,请参见

    https://git-scm.com/book/en/v2/Git-Branching-Branching-Workflows

  3. 在左边栏,在下面设置>存储库,当开发人员想要将他们的更改合并到主分支中时,通过强制使用合并请求来保护主分支。

  4. 设置,在集成在Jenkins项目的URL中添加一个webhook。这个webhook在Jenkins服务器上触发一个构建作业。

詹金斯设置

安装GitLab和TAP插件。MATLAB单元测试使用TAP插件将结果流到一个. tap文件。为了实现从MATLAB到Jenkins作业的测试状态通信,Jenkins导入了. tap文件。

创建一个Jenkins项目。指定这些配置:

  1. 在Jenkins项目中,单击配置

  2. 一般选项卡,指定项目名称。

  3. 源代码管理选项卡,用于存储库URL字段,指定你的GitLab存储库的URL。

  4. 建立触发器选项卡上,选择在将更改推送到GitLab时进行构建

  5. 构建环境部分中,选择使用MATLAB版本并指定MATLAB根,例如,C:\Program Files\MATLAB\R2022a

  6. 构建节,执行MATLAB调用运行脚本。的运行脚本打开项目并运行所有单元测试。对于本例中的项目,代码为:

    nodisplay -r…"cd /var/lib/jenkins/workspace/'18b Metrics CI Demo';(真正的)”

    有关更多信息,请参见连续积分使用MATLAB项目和Jenkins

  7. Post-build行动选项卡,配置TAP插件将TAP结果发布到Jenkins。在测试结果字段中,指定/ * . tap报告.为要归档的文件,指定报告/ * * / * *工作

    TAP插件在任务的扩展结果中显示了MATLAB单元测试的详细信息。Jenkins归档基础设施保存在Jenkins构建期间生成的派生构件。

持续集成工作流程

在设置项目、Jenkins和GitLab之后,遵循持续集成工作流。

阶段1:特性开发

  1. 创建GitLab存储库的本地克隆。看到从SVN存储库签出

  2. 在Si金宝appmulink中,导航到本地GitLab存储库。

  3. 创建一个特性分支并提取和签出文件。看到使用Git分支和合并文件而且用Git拉,推和取文件

  4. 对项目文件进行必要的更改。

  5. 在仿真数据检查器中模拟模型并验证输出。

  6. 运行MATLAB单元测试。有关更多信息,请参见runtests

  7. 添加并提交修改后的模型到特性分支。看到使用Git分支和合并文件而且用Git拉,推和取文件

  8. 将更改推送到GitLab存储库。看到使用Git分支和合并文件而且用Git拉,推和取文件

  9. 在GitLab中创建一个合并请求。选择特征分支作为源分支,目标分支作为主分支。点击比较分支并继续

  10. 如果该特性没有完全实现,请在请求的开头添加字母WIP:,从而将合并请求标记为正在进行的工作。如果合并请求没有标记为WIP:,则在创建后立即触发构建。

  11. 点击创建合并请求

阶段2:使用连续积分进行鉴定

  1. 如果字母WIP:不在合并请求的开头,则push命令触发Jenkins构建。在本例的Jenkins设置部分中,您配置了Jenkins,以便在向GitLab推送更改时执行构建。如需删除字母,请单击解析WIP状态

  2. 导航到Jenkins项目。在生成历史中,您可以看到生成状态。

  3. 单击Build。

  4. 点击抽头测试结果

  5. 对于本例,使用MetricThresholdGateway.m有三个指标的单元测试没有通过,因为这些指标没有达到阈值。要研究此数据,必须在本地下载数据。

    MetricThresholdGateway的测试结果

阶段3:在本地调查质量问题

  1. 将存档的结果下载到本地Git存储库工作区。

  2. 解压缩下载的文件。复制报告/而且工作/文件夹到本地存储库中相应的文件夹。

  3. 要查看结果,请打开项目和Metrics仪表板。

    度量指示板显示建模指南遵从性、模型大小和模型架构

  4. 为了解决测试失败,对模型进行必要的更新。将更改推到GitLab中的特性分支。

  5. 集成工程师可以使用Jenkins测试结果来决定何时可以将临时分支合并到主分支中。

另请参阅

|

相关的话题

外部网站