开发区域

先进与MATLAB软件开发

一个歌唱配置代码

这是一个月黑风高的夜晚。专门的工程师像脱缰的野马在雨和泥她臭名昭著的关键包通过挑战性的地形管道穿越。她有一个至关重要的交付和时间是非常重要的。然而,她的自信坚强。毕竟,她发表了类似的包几百次。她很快但仔细了这个重要的交付,在周围的所有熟悉的凹坑,急转弯,壮观的悬崖。她刚刚开始真正享受的刺激她的路径的效率和精度,当灾难发生。

你看,的熟悉的路径管道穿越改变了!它不再是同样的路线,她在等,,不幸的是她从未改变的通知。大崩溃。和昂贵的。但最糟糕的是,现在她发现自己迷失在一个陌生的路径的中间,不知道她怎么可能让她交付。她迷路了,包不能交付。

让我自我统治之前我太全神贯注于这个故事和辞掉工作去追求奶酪球小说。奶酪放在一边,不是我们的主人公在这个故事能认同有人参与管理一个软件交付管道吗?似乎就在我们最自信的输送管道,灾难(通常在周五下午四点半amirite吗?)

如果问题是在管道或管道配置中,当它罢工可以非常具有挑战性的调试。特别是如果你的CI / CD管道埋在UI。你有没有发现自己这样喃喃自语:

“我设置这个管道在哪里?”

“谁改变了我的管道? !”

“我希望我不需要这种锅炉钢板为所有我的项目!”

…或者,如果你有过不愉快的经历造成数据丢失或损毁的CI配置数据……

“世界上我又设置了(在过去的3年,多个变化)?”

那么这些情绪总是导致一个更好的方法。迟早大部分项目管道管理的解决这一问题的原则配置代码。这是我的博客主题承诺你我们将地址和讨论,最后我们到了。

配置代码遵循的原则我们最小化CI在CI服务器配置界面。我们所做的在管道不应定义为模糊和不透明的元数据所持有的某个CI服务器实例(在哪里?谁知道!)我们应该定义过程和管道代码——发生的变化。更改记录,可以恢复,是完全独立于特定的CI服务器实例的状态。

我们的主人公交付的管道穿越,而她可能无法避免崩溃,当问题出现它更容易诊断和定位原因,最终走出峡谷。

我们的詹金斯插件金宝app支持这一点。还其他平台我们支持,比如金宝appCircleCI,特拉维斯CI,Azure DevOps,GitHub的行为遵循这一原则。

看到这个工作对我们的詹金斯插件,让我向你展示如何将我们讨论的项目在这里到一个Jenkinsfile使用插件的支持一种称为詹金斯管道的特性。金宝app这个项目包括一个墨西哥人编译步骤和后续步骤运行测试和生产试验结果和覆盖工件。

这其实很简单。这个项目在其管道有以下步骤:

  1. 告诉詹金斯MATLAB在哪里(实际上更多新闻使这更容易管理,但也许这是一个未来的博客)
  2. 编译墨西哥人文件
  3. 运行测试
  4. 处理测试结果和覆盖工件

现在而不是定义这些在UI中,我们将创建一个Jenkinsfile包含这些步骤的管道,这我们可以检查到我们的项目与我们的代码。

让我们先从一个基本的管道,指定它可以使用任何可用的詹金斯代理和一个占位符添加我们的管道阶段。

管道{代理任何阶段{}}

步骤1

还记得我们管道有4个步骤,让我们从第一步开始。我们需要告诉詹金斯MATLAB在哪里。实际上这只是通过设置环境,机器本身知道MATLAB系统路径。当调用MATLAB的插件就叫MATLAB壳,所以让它正常工作仅仅意味着将路径环境变量与MATLAB这管道调用的持续时间matlab从壳牌将调用MATLAB建立在构建所需的代理。这看起来像这样:

环境{路径=“/应用程序/ MATLAB_R2020b.app / bin: ${路径}”}

步骤2

下一步是构建墨西哥人文件。作为一个提醒项目我们正在与这里的例子中,libDirectional,有一个很好的功能compileAll对我们来说这很管用。记住,我们显示在这里在MATLAB的形式把这个项目帮助让我们的环境设置正确。所以我们的命令只是一个快开的项目和一个漂亮的电话compileAll函数。在这里,我们使用runMATLABCommand此举正值插件的一部分。我们不需要担心如何MATLAB发射(随不同版本),我们只是担心我们需要调用的命令。这就容易与这一步里面添加一个阶段:

阶段(“墨西哥人编译文件”){步骤{runMATLABCommand“openProject (pwd);compileAll”}}

步骤3

现在,让我们来运行测试!上次我们谈到了我们跑中定义的所有测试项目,我们生成的测试结果在水龙头格式和代码覆盖率Cobertura格式。我要做轻微的调整,因为TAPPlugin,这些流程挖掘的结果,不支持詹金斯管道以及JUnit插件。金宝app你可能会开始看到,这可以用一些简单的管道语法匹配相同的事情我们可以通过UI。

阶段(“运行MATLAB测试”){步骤{runMATLABTests (testResultsJUnit:“matlabTestArtifacts / junittestreport.xml”codeCoverageCobertura:“matlabTestArtifacts / cobertura.xml”)}}

步骤4

…最后,现在我们已经建立了我们的项目,它和生成的一些测试结果和测试覆盖率的工件,我们现在可以处理这些工件使用其他插件(意思为目的JUnit插件代码覆盖率API插件)。我会将它们添加到相同的阶段测试运行。

阶段(“运行MATLAB测试”){步骤{runMATLABTests (testResultsJUnit:“matlabTestArtifacts / junittestreport.xml”codeCoverageCobertura:“matlabTestArtifacts / cobertura.xml”junit)“matlabTestArtifacts / junittestreport.xml”publishCoverage适配器:[coberturaAdapter (matlabTestArtifacts / cobertura.xml)]}}

就是这样,这就是我们需要的。这是整个Jenkinsfile供参考:

管道{代理任何环境{路径=“/应用程序/ MATLAB_R2020b.app / bin: ${路径}”}阶段{阶段(“墨西哥人编译文件”){步骤{runMATLABCommand“openProject (pwd);compileAll”}}阶段(“运行MATLAB测试”){步骤{runMATLABTests (testResultsJUnit:“matlabTestArtifacts / junittestreport.xml”codeCoverageCobertura:“matlabTestArtifacts / cobertura.xml”junit)“matlabTestArtifacts / junittestreport.xml”publishCoverage适配器:[coberturaAdapter (matlabTestArtifacts / cobertura.xml)]}}}}

现在就检查到您的存储库的根目录下,,你就会好了。这是你如何创建一个使用它的詹金斯的工作:

…现在你可以看到管道运行是十全十美的,因为它把其管道Jenkinsfile代替詹金斯UI上的指令:

…现在这个管道配置检查以来,它的代码,它可以恢复代码,它可以用代码审查,可以合理的代码。代码是美丽的,尤其是一些源代码控制的支持,MATLAB的项目,我们希望是有用的CI平台集成。

现在我们都在歌突然! !




发表与MATLAB®R2020b

|

评论

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