「持续集成实践系列」Jenkins 2.x 搭建CI需要掌握的硬核要点(一)

简介: 「持续集成实践系列」Jenkins 2.x 搭建CI需要掌握的硬核要点(一)

1. 前言


随着互联网软件行业快速发展,为了抢占市场先机,企业不得不持续提高软件的交付效率。特别是现在国内越来越多企业已经在逐步引入DevOps研发模式的变迁,在这些背景催促之下,对于企业研发团队所需要具备的持续集成和持续交付(简称CI/CD)能力变得越来越不可或缺。


相信现在不管是开发人员、测试人员或者是运维人员,在求职招聘时,基本上如果是面试的是中高级以上的职位,大多都要求要具备相关CI/CD的项目建设或参与搭建经验。


为了帮助到更多公号技术读者,公号从本周起,将以《持续集成实践系列》为主题,分享几篇搭建CI持续集成实践的技术干货。


关于持续集成和持续交付(CI/CD)概念的介绍,公号之前的文章:DevOps研发模式下CI/CD实践详解指南 中有过较详细的介绍,如果还不清楚什么是CI/CD的读者,可以在阅读本文前先,参考一下这篇文章。


2. CI系列大纲


市面上关于CI/CD的建设如果仅从工具、框架层面来讲,方案有挺多,如TeamCity、GitLab CI、Bamboo、Circle CI、Travis CI、Jenkins、公司自研(在研发建设CI/CD能力时,除了CI/CD工具、框架链的建设外,还包括研发协同文化的建设等, 文化层面的这个不在本系列的讨论范围内)。


而在众多的持续集成CI建设工具体系中,Jenkins基本上可以说是独占鳌头,也是大多数公司最常用、最首选的工具之一,占据了将近70%以上的市场。


而随着Jenkins本身的不断发展,当前Jenkins已演变发展到了2.x系列,在Jenkins 2.x系列中,其中最核心的特性是引入了流水线机制,并提出了流水线即代码(pipeline as code)的理念。


因此本系列也将以Jenkins 2.x作为《持续集成实践系列》的载体,为大家介绍在结合Jenkins 2.x搭建持续集成CI能力过程中常见的一些知识要点和实现过程。


系列大纲分为(初步拟订):

  • Jenkins 2.x 搭建CI需要掌握的硬核要点(一)
  • Jenkins 2.x 搭建CI流水线执行流程(二)
  • Jenkins 2.x 搭建CI流水线实现案例(三)
  • Jenkins 2.x 搭建CI流水线通知机制(四)
  • Jenkins 2.x 搭建CI扩展流水线:自定义共享库(五)


3. 先介绍一下Jenkins 2.x


Jenkins 2本身的概念比较宽泛。在特定的上下文环境中,它用来泛指支持流水线即代码及其它类似Jenkinsfile等新特性的新版Jenkins。

 

Jenkins 1.X版本主要通过插件的方式来实现,确切地讲,Jenkins 2也是通过对已有插件的重点升级和新插件的引入来获取新功能。

 

相比之前,用户只能通过WEB界面进行配置的方式来定义Jenkins任务,Jenkins 2则通过使用Jenkins DSL和Groovy语言编写程序,用户可以定义流水线并执行各种任务。

 

这里提到的DSL代表领域特定语言(Domain-Specific Language),可以理解为一种适用于Jenkins的编程语言。DSL基于Grovvy实现,并通过概念和结构封装了Jenkins的特定功能。

 

Jenkins 2推荐使用名为Jenkinsfile的文件保存任务配置和流水线信息,不同的项目和分支都会有自己的Jenkinsfile,其内容各不相同。你可以将全部代码写在一个Jenkinsfile中,也可以通过共享库的方式调用外部代码。


4. Jenkins 2.x 实现流水线的两种语


当我们通过Jenkins 2.x实现流水线时,有两种不同的语法样式:脚本式语法(script syntax)和声明式语法(declarative syntax)。


脚本式语法(script syntax)是Jenkins最开始实现流水线即代码的方式,这是一种命令式风格,在以前版本的Jenkins中,流水线即代码大体就是Groovy脚本,其中插件部分针对Jenkins的DSL步骤。这种方式几乎没有结构上的约束,程序流程也基于Groovy语法结构实现。

 

这种模式现在被称为脚本式流水线。在脚本式流水线中,DSL支持为数众多的任务步骤,但是仍然缺失了部分面向Jenkins任务的核心特性,比如,构建后处理、流水线结构错误检查以及基于不同执行状态发送通知的功能。当然大多数功能都可以通过Groovy编程机制来模拟实现,比如try-catch-finally语法。但是这在面向Jenkins编程的基础上对Groovy语言技能提出了更高的要求。


声明式语法,是Jenkins提供的一种新的选择,声明式风格的流水线代码被编排在清晰的段落中,相对于只关注实现逻辑。


5. 如何选择脚本式语法或声明式语法


那么有哪些因素会影响选择脚本式语法或声明式语法呢?和大多数事情一样,这也不是一个严谨的科学问题。在特定的情况下,对比需求、实现的结构和流程以及构建流水线的人员技能和背景,二者可能各有千秋。


 

比如,脚本式流水线具有以下优点:

  • 更少的代码段落和弱规范要求。
  • 更强大的程序代码能力。
  • 更像编写代码程序。
  • 传统的流水线即代码模型,用户熟悉并向后兼容性。
  • 更灵活的自定义代码操作。
  • 能够构建更复杂的工作流和流水线。

 

但同时,脚本式流水线也具有以下缺点:

  • 普遍要求更高的编程水平。
  • 语法检查受限于Groovy语言及环境。
  • 和传统的Jenkins模型有很大差异。
  • 与声明式流水线的实现相比,同一工作流会更复杂。


看一则简单的,脚本式流水线示例:

1node("worker_node1"){
 2    stage("Source"){
 3        //从Git仓库中获取代码
 4        git 'git@github.com:zhoujinjian/intelligent-test-platform.git'
 5    }
 6    stage("Compile"){
 7        //运行Gradle进行编译和单元测试
 8        sh "gradle clean comileJava test"
 9    }
10}


而声明式流水线优点有:

  • 更结构化,贴近传统的Jenkins Web表单形式。
  • 更强大的声明内容能力,高可读性。
  • 可以能过Blue Ocean图形化界面自动生成。
  • 段落可映射到常见的Jenkins概念,比如通过。
  • 更友好的语法检查和错误识别。
  • 提升流水线间的一致性。

 

但如此同时,声明式流水线的缺点也很明显:

  • 对迭代逻辑支持较弱(相比程序而已)
  • 对于传统的Jenkins中部分功能缺乏支持。
  • 更严格的结构。
  • 目前对于复杂的流水线和工作流难以胜任。



声明式流水线示例:

1pipeline{
 2    agent{
 3        lable "worker_node1"
 4    }
 5    stages{
 6        stage("Source"){
 7            steps{
 8                 //从Git仓库中获取代码
 9                git 'git@github.com:zhoujinjian/intelligent-test-platform.git'
10            }
11        }
12        stage("Compile"){
13            steps{
14                //运行Gradle进行编译和单元测试
15                sh "gradle clean comileJava test" 
16            }
17        }
18    }
19}


简而言之,对于新用户和那些希望流水线具备传统Jenkins一样可读性的用户来说,声明式流水线更容易学习和维护。脚本式流水线更加灵活,允许用户不受结构结束实现更多功能。

 

不过,总的来说,任何一种流水线类型对大多数场景而言同样适用。好了本文作为CI持续集成系列的开篇,先介绍到这里吧。



如果你觉得文章还不错,请大家点赞分享下。你的肯定是我最大的鼓励和支持。


目录
相关文章
|
1月前
|
机器学习/深度学习 人工智能 jenkins
软件测试中的自动化与持续集成实践
在快速迭代的软件开发过程中,自动化测试和持续集成(CI)是确保代码质量和加速产品上市的关键。本文探讨了自动化测试的重要性、常见的自动化测试工具以及如何将自动化测试整合到持续集成流程中,以提高软件测试的效率和可靠性。通过案例分析,展示了自动化测试和持续集成在实际项目中的应用效果,并提供了实施建议。
|
1月前
|
jenkins Devops Java
DevOps实践:Jenkins在持续集成与持续部署中的价值
【10月更文挑战第27天】在快速发展的软件开发领域,DevOps实践日益重要。Jenkins作为一款流行的开源自动化服务器,在持续集成(CI)和持续部署(CD)中扮演关键角色。本文通过案例分析,探讨Jenkins在Java项目中的应用,展示其自动化构建、测试和部署的能力,提高开发效率和软件质量。
66 2
|
13天前
|
DataWorks 数据挖掘 大数据
方案实践测评 | DataWorks集成Hologres构建一站式高性能的OLAP数据分析
DataWorks在任务开发便捷性、任务运行速度、产品使用门槛等方面都表现出色。在数据处理场景方面仍有改进和扩展的空间,通过引入更多的智能技术、扩展数据源支持、优化任务调度和可视化功能以及提升团队协作效率,DataWorks将能够为企业提供更全面、更高效的数据处理解决方案。
|
16天前
|
监控 jenkins Linux
从 Jenkins 持续集成出发:探究如何监控员工电脑屏幕
Jenkins 在企业信息化管理中用于自动化构建、测试和部署,提高开发效率。本文讨论了其重要性,并从技术角度探讨了屏幕监控的可能性,但明确反对非法监控,强调应合法合规地管理企业和尊重员工隐私。
58 12
|
24天前
|
存储 测试技术 持续交付
Docker与CI/CD的集成策略及其对软件开发效率和质量的提升作用
本文探讨了Docker与CI/CD的集成策略及其对软件开发效率和质量的提升作用。首先介绍了CI/CD的基本概念,接着阐述了Docker在环境一致性、快速部署、资源隔离和轻量化方面的优势。文章还详细讨论了构建、测试和部署阶段的具体集成方法,以及集成后带来的效率提升、可靠性增强、加速交付和易于管理等好处。最后,通过案例分析展示了集成的实际效果,强调了Docker与CI/CD结合的重要性和未来前景。
39 2
|
1月前
|
运维 Devops jenkins
DevOps实践:持续集成与持续部署在现代软件开发中的作用
【10月更文挑战第42天】在快节奏的软件开发世界里,DevOps已经成为一种提升效率、确保质量和加速交付的重要方法。本文将深入探讨DevOps的核心组成部分—持续集成(CI)和持续部署(CD)—并展示它们如何通过自动化流程优化开发周期。我们将从基础概念讲起,逐步过渡到实际操作,最终通过一个简单代码示例来演示这一过程。文章旨在为读者提供清晰的指导,帮助他们理解和实现CI/CD流程,从而在软件开发领域取得竞争优势。
|
1月前
|
Devops jenkins 测试技术
DevOps实践:自动化部署与持续集成的融合之旅
【10月更文挑战第41天】在软件开发的世界中,快速迭代和高效交付是企业竞争力的关键。本文将带你走进DevOps的核心实践——自动化部署与持续集成,揭示如何通过它们提升开发流程的效率与质量。我们将从DevOps的基本理念出发,逐步深入到具体的技术实现,最终展示一个实际的代码示例,让理论与实践相结合,为你的开发旅程提供清晰的指引。
48 4
|
1月前
|
运维 jenkins Java
Jenkins在持续集成与持续部署中的价值
Jenkins在持续集成与持续部署中的价值
|
1月前
|
存储 监控 Devops
DevOps实践:持续集成/持续部署(CI/CD)的实战指南
DevOps实践:持续集成/持续部署(CI/CD)的实战指南
|
1月前
|
jenkins Java 持续交付
软件开发自动化程度的不断提高,持续集成(CI)和持续部署(CD)成为现代软件开发的重要组成部分
随着软件开发自动化程度的不断提高,持续集成(CI)和持续部署(CD)成为现代软件开发的重要组成部分。本文以电商公司为例,介绍如何使用 Jenkins 自动发布 Java 代码,包括安装配置、构建脚本编写及自动化部署等步骤,帮助团队实现高效稳定的软件交付。
39 3