,,,,詹金斯已经成为大量公司最常用的一种持续集成工具了,但是目前管道的普及程度可能依然低于30%,大量的团队依然使用自由风格这种笨重的方式,给统一构建过程,构建集中管理带来极大的不便。笔者通过下面的18个问题来讲解一下为什么企业级持续集成服务需要使用管道的构建方式。
,,,,,,
<强>一、Jenkins2.0的最大改变是什么? 强>
很多人认为jenkins2.0的最大改变是增加了管道,实际上管道在Jenkins1.0中已经有了这个概念,而jenkins2.0中最大的改变应该是管道代码,即以代码的方式描述管道。
<强>二、管道由谁来编写,由谁维护?管道统一管理的优势? 强>
由于管道编写需要代码能力,并且管道的中执行步骤直接影响了最后构建产物的质量,所以建议管道需要由持续集成服务部门统一编写,统一管理。此持续集成服务部门可以由工程效能团队,测试团队,ci团队等兼任。编写好的管道需要标记模版的使用方法和作用,需要相关的文档或者json串记录模版的这些属性,那么业务部门就可以自助的使用这些模版,并在无形之间执行了我们在模版中设置的一些质量扫描测试的工作,并收集回了整个软件生命周期的元数据,用于我们对业务的质量进行评判。
<强>三、管道最佳管理方式? 强>
由统一的持续集成服务部门编写管道的模版和所需的类库,将这些模版和类库存放到gitlab等源码仓库中统一进行版本控制管理。并将源码地址配置到詹金斯的共享库的功能中,业务开发人员如需詹金斯进行构建,只需传递自己所需的参数,调用持续集成服务部门已经写好的图书馆,就可以自行设置构建任务了。
Git仓库保存流水线模版:
<强>四、脚本式管道和声明式管道如何选择? 强>
声明式管道比较简单,也是蓝海支持的语法格式,但此种管道在jenkins2.5之后才支持,成熟度有待发展,是官方推荐的方式。
Jenkins2.0最早支持的管道,如果对Groovy语法很熟悉,可选择脚本式管道,可以实现更复杂的逻辑。
<强>五,不会管道的语法怎么办? 强>
Jenkins2.0中提供了流水线语法查询的功能,可以自动生成流水线代码片断,直接拷贝粘贴就可以
<强>六,管道中要涉及的基础工具链包括哪些? 强>
管道一般的应用是来做集成构建的,也就是把源码打包成制品,所以管道中涉及的最基础的工具一定是源码仓库和制品仓库,以及构建过程中使用的每种语言的打包工具。
源码仓库:用于管理源代码,常用gitlab, github, svn等
制品仓库:用于管理制品,常用Artifactory。
打包工具:如mvn,走,npm,码头工人等
<强>七,管道中涉及到的进阶工具链? 强>
Jira:关联需求信息
Sonarqube:代码静态扫描
x光:制品漏洞扫描
JMeter:性能测试
Junit:单元测试
JaCoCo:代码覆盖率
Ansible saltstack:发布
<强>八,管道中需要设置的质量关卡包括什么? 强>
质量关卡,即构建过程中的质量门,为确保每一个版本都能高质量发布,建议将以下指标与部署包关联,作为整个管道构建过程的质量关卡,如果有未达到的情况,记录并处理。关卡包括:
,,,,,,代码静态扫描的问题数量
,,,,,,80%以上的单元测试覆盖率
,,,,,,漏洞扫描的结果
,,,,,,开源许可证扫描
,,,,,,不同环境是否具备不可变基础设施
,,,,,,集成测试是否通过
,,,,,,性能测试结果
,,,,,,较高的接口测试覆盖率
,,,,,,
<强>九,什么是一次构建,多次部署?如何在管道中实践? 强>
DevOps成熟度标准中建议做到一次构建,多次部署。目的是为了在测试环境测过的包可以在不改变任何环境和依赖的情况下发布到生产线上。发布时重新打包往往会因为源码版本变更,基础环境变更等因素导致发布事故。