技术文章和通讯

持续集成利用GitLab仿真软件模型的验证金宝app

杰迈玛Pulipati, Anand Vaidyanathan Sarma,大卫•Boissy MathWorks


这是一个由两部分组成的系列文章的第二篇文章。第1部分,持续集成的仿真软件模型的验证金宝app,看着利用GitLab®版本控制和詹金斯持续集成(CI)。本文使用版本控制和CI GitLab。

在这个例子中可以使用的项目GitHub®文件交换下载。

持续集成(CI)工作流

持续集成(CI)是一个敏捷方法的最佳实践开发人员定期提交和他们的源代码更改合并到一个中央存储库。这些“变更集”然后自动构建,合格,释放。图1说明了这个基本的CI工作流的开发工作流程。

图1所示。CI工作流。

图1所示。CI工作流。

案例研究:仿真软件模型验证、金宝app构建和测试GitLab之内

在这个例子中,我们使用基于模型的设计与CI执行基于需求的测试在巡航控制系统(图2)。

图2。巡航控制系统。

图2。巡航控制系统。

CI管道

CI管道技术文章中解释说,持续集成的仿真软件模型的验证金宝app。我们将这些概念应用于定义GitLab管道。每次更改推到GitLab库,执行CI管道。如图3所示。

图3。巡航控制系统管道

图3。巡航控制系统管道。

本例中的阶段管道如下:

  1. 验证建模指南:MATLAB®脚本运行模型在模型使用ISO26262顾问检查并生成一个HTML报告。
  2. 生成代码:MATLAB脚本构建模型并生成相应的构建报告。
  3. 执行测试用例:单元测试是运行在一个指定的模型,并生成相应的报告。
  4. 包构件:总结报告和相关信息生成之前的阶段。
  5. 部署:从以前的所有工件的阶段被下载到工件路径中指定管道。

工作流步骤

工作流包含以下步骤(图4):

  1. 触发GitLab管道,通过观察,验证和构建阶段。
  2. 检测测试用例失败在GitLab CI管道和创建一个问题追踪和讨论错误修复。
  3. 繁殖这个问题在我们的桌面MATLAB。
  4. 修复这个问题在模型中。
  5. 在本地测试确保测试用例通过。
  6. 审查更改测试分支。
  7. 提交改变Git和引发GitLab CI管道。
  8. 验证、构建和测试在GitLab。
  9. 创建一个合并请求测试部门的变更合并到主分支并关闭相应的问题。
图4。工作流示例。

图4。工作流示例。

我们第一次没有通过CI循环在左上方。它显示了CI测试失败,当地繁殖,标准放松,并成功完成CI工作流。

工作流细节

1。我们首先触发管道在GitLab从MATLAB GitLab推动变化。模型的标准检查和代码生成。

管道的状态可以看到项目的主页。在管道的状态工作可以看到通过点击图标。红色象征表明管道已经失败了。

这是父子管道显示触发提交失败。相应的管道可以扩展孩子在第二列“下游”。

2。接下来,我们检测一个失败的管道内“TargetSpeedThrottle。”的child pipeline "TargetSpeedThrottle" has failed. This failed pipeline can be viewed by clicking on it.

从测试阶段失败,其他阶段不执行。可以通过点击查看控制台输出失败的工作。

在观察输出,我们可以说“opMode增量”单元测试用例失败了。一个新问题可以通过单击创建“新问题”按钮在右边。可以输入描述等领域使用这种形式,这对于存储库中创建一个新的问题。

下面的创建问题出现,# 1对应的版本号。

article-gitlabci-verification-金宝appsimulink-workflow-details2d-issue-number

3所示。更好地理解失败,我们繁殖失败在本地使用仿真软件测试™。金宝app“TargetSpeedThrottleTestManager打开测试文件。mldatax”位于“设计/ TargetSpeedThrottle /管道/测试/集合”文件夹并运行测试用例”opMode增量。“在测试套件中,我们可以看到,“验证语句”没有“opMode增量”单元测试如图所示。

4所示。来修复这个问题,打开“设计/ TargetSpeedThrottle /规范/ TargetSpeedThrottle。基金”模式并导航到测试评估块内的测试工具”TargetSpeedThrottle_Harness”如图所示。

评估断言“throtCC”和“exp_throtCC”之间的差别小于0.1%如图所示。

这个评估太严格检查差异小于0.1%。这个值必须改为0.005修复试验。

5。这个问题似乎固定在我们的模拟。确认,我们在本地测试保存模型并运行测试在测试经理。注意,它通过新的评估标准。

6。我们有固定的本地和验证问题。我们现在使用模型比较工具审查更改之前的版本控制。

我们也可以使用发布特性模型的比较工具来检查代码。

7所示。bug修复,我们提交这些变化和推到远程存储库与MATLAB GitLab项目,添加一个提交消息要注意改变评估标准。

提交消息可以使用特定的短语来写的自动关闭的问题。这里的提交消息“修复# 1”会自动关闭问题当管道创建失败,当最近的CI管道通过。

然后我们注意的最新提交GitLab库。

8。GitLab CI管道运行。我们可以看到,验证、构建和测试现在通过管道阶段。

9。我们现在可以开始合并请求合并的变化测试分支到主分支。在GitLab,然后单击库下,我们可以选择分支合并请求下一个最新提交测试分支或使用“创建合并请求”按钮,出现页面顶部的存储库。

我们完成表单,提交合并请求。

作为分公司的主人,我们可以接受合并请求通过单击合并按钮。根据CI的设置中,我们还可以启用自动合并后CI管道已经过去了。所有更改正在拍摄的主要分支,和管道自动开始运行在主分支。

管道执行后,相应的问题自动被关闭。

执行后的验证、构建和测试阶段的管道,在方案阶段总结报告生成每一个模型。

使用例子:工具、资源和需求

在这个例子中可供使用的项目下载。以下部分概述资源来帮助您开始,以及你需要的工具和如何对它们进行配置。以下部分概述资源来帮助您开始,以及你需要的工具和如何对它们进行配置。

配置系统

GitLab作为版本控制系统和CI系统。MATLAB和GitLab必须配置在一起。下面的教程将帮助设置。

所需的工具

  • GitLab帐户。GitLab用于源代码控制,CI和云服务是可用的。MATLAB的项目包括与GitLab Git接口进行通信。

CI许可证注意事项

如果你计划来执行CI在许多主机或云,联系MathWorks (continuous-integration@mathworks.com)寻求帮助。注意:转型产品,如MathWorks编码器和编下载188bet金宝搏译器产品可能需要客户访问许可证(CAL)。

附录1:配置MATLAB项目和GitLab

步骤1。将MATLAB项目配置为使用源代码控制

在我们的示例中,第一步是配置我们的项目与GitLab使用源代码控制。

  1. 创建一个新目录名为MBDExampleWithGitLab示例加载到它,打开项目MBDExampleWithGitLab.prj MATLAB。
  2. 在GitLab,创建一个新项目将远程存储库。它的名字。MBDExampleWithGitLab并记下网址在哪里举办。
  3. 在MATLAB中,将项目转换为使用源代码控制。在项目选项卡上,单击使用源代码控制

点击将项目添加到源代码控制中

4所示。点击转换

5。点击开放项目当完成。

这个项目正在本地Git源代码控制。

步骤2。设置GitLab跑步

GitLab跑步者是一个应用程序,该应用程序使用GitLab CI / CD在管道运行工作。GitLab运动员必须安装,注册;和开始执行管道。

安装、注册并启动GitLab选手对应于您的操作系统,请参阅提到的步骤在这里在“配置(可选并发值。toml”可以作为8对于这个例子)。参考下面的点之前登记的跑步者在上面的链接。

a。GitLab存储库可以为单个项目使用特定的跑步者。创建和注册一个特定项目的运动员,遵循步骤所对应的需求和所使用的操作系统。在注册过程中输入的标签将有助于确定哪些运动员分配在GitLab库。在这个例子中,标签应给予“testci”因为.yml文件(用于管道定义在当前例子)标记为“testci。“虽然提到遗嘱执行人在注册期间,“壳”可以使用。这意味着一个shell环境将在执行期间使用的管道。

b。在成功注册的选手,将显示一条消息,看起来像这样:

ci-金宝appsimulink-using-gitlab-appendix1-step2-runner-registered

步骤3。GitLab个人访问令牌

创建一个个人访问令牌GitLab库。一定要记下生成的个人访问令牌,因为它只能看一次。创建一个CI / CD管道变量对于这个个人访问令牌(“关键”指的是变量名和“价值”是实际的令牌)。这个变量名中输入的键字段将被用作一个参数的工作构件API中使用管道的定义,所以记下它。(运行这个例子,提到关键CIPROJECTTOKEN。)

步骤4。配置管道

1。提到运动员.yml文件中的相关标签.yml项目文件夹中的文件描述词的不同阶段管道。的.gitlab-ci.yml文件主要是指管道时触发代码被推到存储库。的文件.driverSwRequest-gitlab-ci.yml,.cruiseControlMode-gitlab-ci.yml,.targetSpeedThrottle-gitlab-ci.yml,.crs_controller-gitlab-ci.yml参考模型和得到的孩子管道引发改变或gitlab-ci只有在一个特定的模型。yml是改变。打开.yml文件和标签字段改为“testci”类似步骤2GitLab跑步者的设置。一个示例如下所示:

2。修改工件路径

验证和修改ARTIFACTS_DOWNLOAD_PATH变量.gitlab-ci.yml。下载的工件在部署阶段孩子的管道使用工作构件API。这个变量值是用于将工件路径下载。

appendix1-step4b-artifacts-download-path

3所示。指定的个人工作构件API访问令牌

每个孩子的管道.yml文件(.driverSwRequest-gitlab-ci.yml,.cruiseControlMode-gitlab-ci.yml,.targetSpeedThrottle-gitlab-ci.yml.crs_controller-gitlab-ci.yml)有一个部署阶段定义使用工作构件API下载整个孩子管道的工件。这个示例使用“PRIVATE-TOKEN: $ CIPROJECTTOKEN”API请求。CIPROJECTTOKEN替换为关键字段名称中使用的步骤3配置GitLab。

第5步。GitLab提交修改,推动本地存储库

1。在项目选项卡上,单击远程

2。指定的URL远程GitLab起源。这就是GitLab存储库URL主持。

点击验证确保连接到远程存储库成功并单击好吧。这个项目现在是配置与GitLab推和拉的变化。

3所示。点击提交执行一个初始提交。

appendix1-step2-part3b-enter-comment

4所示。点击从本地存储库将所有更改远程GitLab库。

5。刷新GitLab仪表板,观察MATLAB项目的内容。

GitLab跑步者成立以来在前面的步骤中,管道开始运行尽快更改推到存储库。的.gitlab-ci.yml文件负责启动管道。

步骤6:创建测试分支

在这一步中,我们创建一个测试部门进行测试和验证与主干合并前的变化。

1。点击分支机构

扩大创建分支和标签节中,名字分支并单击“测试”创建

2。现在观察测试浏览器的分支。从测试点击分支开关然后关闭

3所示。将变更测试分支。在MATLAB中,选择推动这些变化在GitLab GitLab并观察测试分支。

附录2:解释管道和工件

1。父子管道

这个示例使用父子管道结构。

a。有一个父母管道组成的孩子主要管道(第一列在上面图片所示)。有4个触发(显示为4工作下阶段“下游”)来表示4孩子管道。每个孩子系统的管道是用于每个模型的进步也可以被扩大下游。

孩子管道上面显示阶段的“CruiseControlMode”模型系统。

2。在儿童阶段管道

  • 验证:验证建模ISO26262标准这里使用模型检查™。金宝app
  • 构建:这个执行的代码生成模型。
  • 这个执行测试:单元测试编写的模型。
  • 包:一个最后阶段来展示和管道已成功生成的工件。
  • 部署:一个占位符阶段包括任何部署代码。管道的所有工件的使用工作构件API下载。

3所示。YAML的关键词

这管道结构和定义的工作必须在创建.yml文件,这是跑步者用来执行管道。一个.gitlab-ci.yml拥有的配置细节阶段和就业CI / CD管道的任何项目。下面的步骤解释.yml文件用于构造在前面的步骤中所描述的父子管道(本文中使用的例子有所有必要的.yml文件执行管道,但下面的步骤简要描述的内容.yml文件)。

。父母的最初阶段管道中提到.gitlab-ci.yml。进一步描述每个阶段的工作。

appendix2-part3a-gitlaciyml-stages

b。关键字“触发”对应于子管道。因为有4模型,不同的工作必须写。这是其中的一个例子。

每一份工作开始于一个独特的作业名舞台上它属于紧随其后。因为这个调用另一个孩子,孩子的.yml文件提到使用关键字“包括。““战略”字意味着下一份工作将不会执行,直到完成。“规则”字表明孩子管道必须触发仅当用户改变文件夹路径中提到行22日至25日。

4 c。每个孩子管道有相应.yml文件。他们还将包括一个阶段,在每个阶段的工作宣言孩子的管道。这里有一个例子在孩子管道的工作。

“标签”是指在给定的标记注册的运动员。任何文件/命令执行提到在“脚本。”“工件”所需的文件被保存在传递到下一个工作。通常,任何文件生成工作执行期间和后来有助于用户的验证结果是存储为一个工件。这里,报告/结果生成的分析模型和日志的文件夹保存为工件。母公司的其他工作管道也可以同样的描述gitlab-ci.yml文件。

下载。工件在部署阶段使用工作构件API。这里CIPROJECTTOKEN指CI / CD变量为个人访问令牌创建之前。ARTIFACTS_DOWNLOAD_PATH被定义为一个变量.gitlab-ci.yml。注意工件也可以浏览/下载甚至从个人工作页面中提到以后的步骤。

4所示。工件

管道。可以从存储库的页面。

绿色象征表明管道运行和成功。

b。点击这个符号,我们可以看到管道的成功的工作。

每个工作的进步可以通过点击查看 

这就是任何输出语句控制台打印出来。工作的工件也可以从右边部分的构件可以浏览或下载。孩子的每一个阶段管道直到部署阶段生成工件。

c。每个孩子都下管道的测试结果也可以被测试标签在每个孩子管道的工作。

d。总结报告任何报告/结果文件在执行工作得到存储在分析生成的文件夹在每个模型。除了这些,年底总结报告创建每个孩子管道(在方案阶段),所有孩子的结果与前一阶段管道。

这是一个例子的总结报告“DriverSwRequest”模式:

这份报告是“/分析/包”文件夹中每一个模型的模型名称“SummaryReport紧随其后。“用户可以下载这些报告作为一个工件从每个孩子的包阶段管道。

如果任何阶段(包)之前孩子的管道失败,然后才能生成摘要报告,因为这只发生在计划阶段。一旦一个阶段失败,控制不进入下一个阶段。

5。孩子在每个阶段Pipeline-Job工件

巡航控制系统项目生成以下工件的阶段:

  1. 验证:模型顾问结果报告
  2. 构建:构建报告,Codegen文件夹
  3. 测试:测试报告
  4. 包装:所有的报告分析文件夹
  5. 部署:之前的所有工件的阶段

6。如何检查管道是否正确执行或不呢

  1. 总结报告中生成的构件是一个很好的起点来验证结果的统计的所有阶段。
  2. 管道必须通过所有的工作。如果MATLAB抛出 错误, 管道作业将失败,因为MATLAB抛出的退出状态代码。

7所示。任何问题的错误信息“错误设置证书验证位置”GitLab管道运行时,参考以下:

2022年出版的

为相关行业观点文章