开发区域

先进与MATLAB软件开发

Git实验室!

大家好,对于这篇文章,我想介绍一下Mariano Lizarraga费尔南德斯作为客座博客。他有一个伟大的故事分享,他很好地演示了一个调谐詹金斯服务器之间的工作流和GitLab存储库。把它拿走马里亚诺·!

大局

在本帖里,我们将呈现一个工作流显示我们如何运行一个MATLAB或仿真软件测试套件持续集成服务器每次我们推动git存储库分支。金宝app

我们不会详细描述什么是持续集成,它涉及到的一切。对于那些有兴趣,我们建议这篇文章介绍这个话题。这篇文章介绍了MATLAB与接口的概念詹金斯,一个著名的持续集成服务器。感觉自由探索这个和其他帖子通过查看相关的词持续集成的范畴。

在下面,我们假设您有一些基本熟悉git和詹金斯服务器运行在本地(甚至)测试访问git存储库。我们将展示Jenkins和之间的相互作用GitLab(一个著名的开放源码的git仓库经理),因此您将需要安装GitLab插件詹金斯。

让我们浏览一下工作流程一步一步。

为了这篇文章中,我们将假定一个简化的持续集成的工作流程如下:

  1. 更改代码或一个模型,上演,致力于git存储库的测试分支。
  2. 更改推到一个git远程测试的分支。
  3. 远程存储库通知(通过web hook)詹金斯CI服务器有新推的事件。
  4. 詹金斯服务器把变化从git存储库和运行一个测试套件。
  5. 如果测试失败,它会创建一个在GitLab错误问题,如果测试通过,它创建了一个合并请求。

这是一个图片说明这个工作流程:

准备詹金斯

我们之前写过博客如何设置詹金斯推出MATLAB单元测试。这里我们将关注配置,所以每次你推的测试分支,詹金斯工作流被触发。

首先创建一个自由泳项目Jenkins和配置您的源代码管理选项卡使用git。远程git存储库的完整地址类型,配置您的凭证,确保你把它从你测试分支。

接下来,配置您的项目建设推向GitLab改变时。注意GitLab CI服务的URL,稍后您将需要配置GitLab。

最后,配置启动MATLAB没有显示,改变项目的工作区目录,并运行一个脚本,我们将在以下部分:

在那之后,保存您的更改。你的自由泳项目已经准备好了。现在GitLab。

准备GitLab

在GitLab要做的第一件事是配置的Web钩将通知詹金斯发生推时。,导航到您的设置在集成分段,添加的网址你写前一节中,检查推动事件的复选框并单击add Webhook按钮:

此时,您可以测试您的web钩在詹金斯触发一个构建。要做到这一点,在同一个集成在GitLab分段,从列表中选择您的webhook,和使用测试按钮,选择推动事件。你应该立即得到一个蓝丝带在顶部显示您的web成功执行

最后,因为我们将使用GitLab RESTful API创建的问题和请求合并,你需要得到一个个人访问令牌。要做到这一点,去你的个人设置,(在最右边的角落标准GitLab实例)和从那里去你访问令牌分段。这将带你去访问令牌创建页面。选择一个名称,选择一个过期日期(你也可以把它空白)和范围检查API复选框。

在您单击绿色创建个人访问令牌按钮,你将被带到一个页面显示您的令牌。确保你的记录标记的地方你将无法看到它。我们将使用令牌当我们编写MATLAB脚本在詹金斯运行测试。

测试脚本

我们将使用的脚本发布的一种变体这个模型的金宝app博客文章

把它转换成一个函数接收一个参数:参数将决定如果它跑在持续集成或本地。这将允许我们在本地测试然后推动服务器来运行。

函数runMyTests (ranInCI)导入matlab.unittest.TestRunner进口matlab.unittest.plugins.TAPPlugin进口matlab.unittest.plugins.ToFile工作区= pwd;如果ranInCI = = 1 resultsLocation = fullfile (pwd,“结果”);。

收集关于当前数据提交:我们可以把评论的问题或合并请求的提交,需要通过合并(或失败,需要固定)。

%收集数据从当前提交的包括%的问题或合并请求。[~、提交]=系统(“git rev-parse——短头”);[~,分支]=系统(“git rev-parse——abbrev-ref头”);

做一个web GET或POST GitLab API:我们将使用webwrite和webread创建问题和合并请求。请注意,在您将需要私人GitLab中创建令牌。

如果ranInCI = = 1拷贝文件(tapResultsFile fullfile (resultsLocation,“TAPResults.tap”));totalFailures =总和(vertcat(结果(:)fail));writeOptions = weboptions (“MediaType”,“应用程序/ x-www-form-urlencoded”,“HeaderFields”,{“PRIVATE-TOKEN”,gitPrivateToken});如果totalFailures = = 0%如果没有失败,创建一个请求合并writeMergeURL = [gitLabAPI“项目/”ProjectID“/ merge_requests ?”];webwrite (writeMergeURL“标题”,(“(Jenkins)测试(s)通过提交的strtrim(提交),“描述”,(“持续集成通过提交”strtrim(提交)“分支”strtrim(分支)”。合并请求准备审查的),“标签”,“merge_request”,“source_branch”strtrim(分支),“target_branch”,“大师”,“approvals_before_merge”,“3”,writeOptions);其他的%测试失败,在GitLab创建一个测试失败问题writeIssueURL = [gitLabAPI“项目/”ProjectID“问题?”];webwrite (writeIssueURL“标题”,(“(Jenkins)测试(s)在提交失败的strtrim(提交),“描述”,(“提交连续集成运行时失败”strtrim(提交)“分支”strtrim(分支)“。”),“标签”,“错误”,writeOptions);结束结束

把它放在一起

现在,您可以测试完整的工作流。你可以看看下面的视频显示完整的过程。注意,视频是无声电影,不需要启动你的音频。

如果你是工作在MATLAB和使用git源代码控制,考虑使用持续集成服务器的自动化测试,并确保您的测试运行。试一试,让我们知道你的想法!

|
  • 打印
  • 发送电子邮件

评论

留下你的评论,请点击在这里MathWorks账户登录或创建一个新的。