当我们讨论Jenkins文件结构的时候,要知道在基于像Jenkins这样的图形用户界面工具和DevOps的基础设施即代码原则之间经常会发生阻抗失配(impedance mismatch)。
中培的龚老师认为,理解这个问题的一种方法是:虽然Jenkins任务描述器基于文本文件,但它们并不是改变任务描述的主要界面,web界面才是。这种方式利弊参半。
Jenkins的既存构建之上创建定制的解决方案很容易,并不要求你非常熟悉Jenkins。 另一方面,Jenkins的开箱即用缺乏我们在程序世界中常用的许多功能。例如继承甚至定义函数这样的基本功能在Jenkins里需要大量工作。
GitLab的构建服务器功能,用的是另一种方法。构建描述器从一开始就只是代码。如果并不需要Jenkins提供的所有能力,GitLab的这个特性值得你一看。
按依赖顺序构建
因为构建的一部分可能会依赖于其他部分,许多构建工具都有构建树的概念:为完成构建而有顺序地构建依赖。
在像Maven这样的工具里,构件图来源于由我们为工件设置的依赖。另一个Java构建工具Gradle,也会在构建之前先创建一个构件图。
Jenkins支持在web界面上可视化Maven的构建顺序,在Maven术语里称为反应器(reactor)。可惜,这个界面并不支持Make类型的构建。
构建阶段
Maven构建工具的主要优势就是它把构建流程标准化了。
这一点对大型企业来说非常有帮助,因为它不需要再发明自己的构建标准了。其他的
构建工具实现各种构建流程一般更加随意。Maven的严苛有好有坏。有时,刚开始用Maven的人们会怀念像Ant那样工具所带来的自由。
你可以用任何工具来实现这些构建,但是当工具本身不强迫构建、测试和部署的标准顺序时,很难还能保持习惯。
我们就应该注意的是,测试阶段是非常重要的。持续集成服务器需要在捕捉错误方面表现出色,而自动化测试是实现这个目标的关键。
可选的构建服务器
虽然以我的经验来看,Jenkins在构建服务器上是绝对的主流,但是它绝非不可替代。
Travis CI是一个托管方案,流行在开源项目中。Buildbot是一个用Python编写和配置的构建服务器。ThoughtWorks出品的Go服务器是另外一种可选方案。Atlassian提供了Bamboo。GitLab现在也支持构建服务器功能了。
当评估不同的方案时,留意不要被供应商套牢( vendor lock-in)了。也要记住构建服务器并不会取代那些已经在本地开发机上表现良好的构建需求。
还有一个经验法则:看看工具是否可以通过配置文件来配置。虽然管理人员容易被图形化配置所打动,但是开发和运营人员不会喜欢被要求使用一个只能通过图形用户界面配置的工具。
校验质量指标
构建服务器的一个用途是校验软件质量指标。Jenkins对此有一些内置的支持。可以在一个任务页面上执行并可视化Java的单元测试。
另一个更高级的可选方案是使用Sonar代码质量可视化器,参见下图。Sonar测试在构建阶段运行并传送到Sonar服务器上,在那里进行存储和可视化。
一台Sonar服务器是一个让开发团队看到他们努力改良代码库的成果的好办法。
Sonar服务器的缺点是有时会减缓构建速度。建议每天夜里运行一次Sonar构建。
构建服务器制造了大量可以显示在公共显示器上的数据。若是构建失败的时候能够立即察觉,就会有很大帮助。
第一步仅仅是连接一个类似资讯站( kiosk-like)那样的显示器,有一个web浏览器指向你构建服务器的web界面。Jenkins有许多插件可以为资讯站显示提供简化的任务概览。它们有时被称为信息辐射体( Xnformation rzadiators)。
连接构建状态到其他类型的硬件上也很常见,例如熔岩灯或者多彩LED灯。
以我的经验来看,这种类型的显示可以让人们对构建服务器充满兴趣。尽管保持长期使用比开始拥有更加困难。如果你想把屏幕放到一个不容易被看到的地方以避免分心,那么做这件事就变得毫无意义了。
慎重放置熔岩灯和屏幕的组合非常有帮助。熔岩灯并不常亮,所以没那么吸引人。当一个构建失败发生时,它亮起来了,于是你就知道你应该看一看构建信息辐射体了。熔岩灯甚至能够表达构建质量的历史记录。当熔岩灯亮的时候,它会发热,过一会儿,熔岩在灯里环绕。当错误被修复,灯冷却了,但是热量还会存在一小段时间,所以熔岩还会环绕一段时间,视修复构建错误的耗时而定。
想了解更多IT资讯,请访问中培教育官网:中培教育