开发区

用MATLAB开发高级软件

去实验室!

大家好,在这篇文章中,我想介绍Mariano Lizarraga Fernandez作为一名客座博主。他有一个很好的故事要分享,他演示了Jenkins服务器和GitLab存储库之间经过良好调整的工作流程。把它拿走Mariano!

大局

在这篇文章中,我们将展示一个工作流程,展示每次我们推到git存储库分支时,如何在持续集成服务器上运行MATLAB或Simulink测试套件。万博1manbetx

我们不会详细描述什么是持续集成以及它所涉及的一切。对于感兴趣的人,我们建议本帖作为对本主题的介绍,本文介绍了将MATLAB与詹金斯,一款著名的持续集成服务器。通过查看持续集成类别。

在下面的文章中,我们假设您对git有一些基本的了解,并且有一个运行(甚至在本地)的Jenkins服务器可以访问测试中的git存储库。我们将展示Jenkins和GitLab(著名的开源git存储库管理器),因此您需要安装GitLab插件在詹金斯。

让我们一步一步地看一下工作流程。

在本文中,我们将假设一个简化的持续集成工作流,如下所示:

  1. 对代码或模型进行更改、分段并提交到git存储库的测试分支。
  2. 更改被推送到git remote的测试分支。
  3. 远程存储库(通过web钩子)通知Jenkins CI服务器发生了新的推送事件。
  4. Jenkins服务器从git存储库中提取更改并运行测试套件。
  5. 如果测试失败,它会在GitLab中创建一个bug问题,如果测试通过,它会创建一个合并请求。

以下是说明此工作流的图片:

让詹金斯准备好

我们以前在这个博客上写过如何去做设置詹金斯启动MATLAB单元测试。所以这里我们将重点关注配置它,所以每次你推到测试分支,将触发詹金斯工作流。

首先在Jenkins中创建一个Freestyle项目,并将源代码管理选项卡配置为使用git。键入远程git存储库的完整地址,配置凭据,并确保将其设置为从测试树枝

接下来,将您的项目配置为在将更改推送到GitLab时生成。请注意GitLab CI服务URL,因为稍后您将需要它来配置GitLab。

最后,配置启动MATLAB无显示,将目录更改为项目的工作区,并运行我们将在以下部分编写的脚本:

之后,保存您的更改。您的自由式项目已准备就绪。现在转到GitLab。

准备好GitLab了吗

在GitLab中,要做的第一件事是配置当推送发生时将通知Jenkins的Web钩子。为此,请导航到您的设置,并在“集成”小节中,添加上一节中编写的URL,选中“推送事件”复选框,然后单击“添加Web钩子”按钮:

此时,您可以测试您的web钩子是否在Jenkins中触发构建测验按钮,选择推送事件。您应该立即在顶部看到一条蓝丝带,表明您的web钩子已成功执行

最后,由于我们将使用GitLab的RESTful API来创建问题和合并请求,因此您需要获取个人访问令牌然后转到您的访问令牌子部分。这将带您进入访问令牌创建页面。选择名称,选择过期日期(您也可以将其保留为空),并选中API复选框作为范围。

点击绿色按钮后创建个人访问令牌按钮,您将进入显示令牌的页面。请确保您将该令牌记录在某个位置,因为您将无法再次看到它。我们将在编写MATLAB脚本以在Jenkins中运行测试时使用该令牌。

测试脚本

我们将使用为发布的脚本的变体这是Sim万博1manbetxulink的博客文章.

将其转换为函数以接收一个参数:参数将确定它是在持续集成中运行还是在本地运行。这将允许我们在本地测试,然后将它推送到服务器上运行。

作用runMyTests(ranInCI)导入matlab.unittest.TestRunner进口matlab.unittest.plugins.TAPPlugin进口matlab.unittest.plugins.ToFile工作空间=pwd;如果ranInCI==1结果位置=完整文件(pwd,“结果”); . . .

收集有关当前提交的数据:因此,我们可以对问题或合并请求发表评论,说明哪些提交已通过,需要合并(或失败,需要修复)。

%从当前提交中收集要包含在%问题或合并请求的正文。[~,提交]=系统('git rev parse——短头'); [~,分支]=系统('git rev parse--abbrev ref HEAD');

进行web获取或发布到GitLab的API:我们将使用webwrite和webread创建问题,并根据需要合并请求。注意,在中,您需要在GitLab中创建私有令牌。

如果ranInCI==1复制文件(tapResultsFile,fullfile(resultsLocation,“点击结果,点击”));totalFailures=sum(vertcat(结果(:).Failed));writeOptions=weboptions(“媒体类型”,“应用程序/x-www-form-urlencoded”,...“海德菲尔德”,...{“私人代币”,gitPrivateToken});如果totalFailures==0%如果没有失败,请创建合并请求writeMergeURL=[gitLabAPI“项目/”投射“/合并请求?”]; webwrite(WriteEmergeURL,...“头衔”,...[“[Jenkins]提交测试通过”strtrim(提交)],...“说明”,...[“提交时传递的持续集成”strtrim(提交)...“分支机构”strtrim(分行)...“.合并请求已准备好供审阅”],...“标签”,“合并请求”,...“来源处”,strtrim(分行),...“目标分行”,“主人”,...“合并前的批准”,'3',...书写选项);其他的%测试失败,在GitLab中创建测试失败问题WriteIsueUrl=[gitLabAPI“项目/”投射“/问题?”]; webwrite(writeisueurl,...“头衔”,...[“[Jenkins]提交测试失败”strtrim(提交)],...“说明”,...[“在提交时运行连续集成失败”...strtrim(提交)“分支机构”strtrim(分行)'.'],...“标签”,“臭虫”,...书写选项);终止终止

把它们放在一起

现在,您已经准备好测试完整的工作流程。您可以查看下面显示完整流程的视频。注意,该视频是无声电影,无需启动音频。

如果您正在使用MATLAB并使用Git进行源代码控制,请考虑使用一个连续的集成服务器来自动化测试并确保您的测试运行。请尝试一下,让我们知道您的想法。

|
  • 打印
  • 发送电子邮件

评论

如需留言,请点击在这里登录到您的MathWorks帐户或创建新帐户。