0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

jenkins持续集成原理

lhl545545 来源:电子发烧友网 2018-02-06 11:43 次阅读

持续集成

开发中,我们经常遇到一些奇怪问题,比如本地可以编译成功的代码但是同事们更新代码后编译出错,或者在项目有多个Target的时候,资源文件只添加到了当前的Target,另外一个Target这个时候是不能正常编译的,再比如写的工具类,被同事改了,或者自己有改动,很多地方用到了,怎么保证这个类的行为没有发生变化而影响到项目中的其它模块呢?诸如此类。

那么这些问题原因在哪,可否避免呢?当然是可以避免的,如果代码有新的改动,提交到版本库中的时候,有一个人帮我们检查必要事项,然后做做测试不就好了,这个当然是可以的,前提是老板同意专门招一个这样的人。

引起各种奇怪问题的原因有很多,比如开发环境比较复杂不干净,IDE的bug,提交前有一些必要的检查需要做,但是开发时因为各种原因没做,这些机械重复的事情我们可以找一个工具来帮我们完成,而且这个工具跑在一个专门的服务器上,该服务器环境相对干净,可以运行一些自动化操作,而自动编译,代码检查,测试等环节,那么这种东西,就是接下来讲的[持续集成]。

个人理解持续集成:为解决程序代码提交质量低,提交内容导致原有系统的bug,按时或按需自动编译版本,自动进行自动化测试。

百度的定义:持续集成是一种软件开发实践,即团队开发成员经常集成他们的工作,通常每个成员每天至少集成一次,也就意味着每天可能会发生多次集成。每次集成都通过自动化的构建(包括编译,发布,自动化测试)来验证,从而尽快发现集成错误。许多团队发现这个过程可以大大减少集成的问题,让团队能够更快的开发内聚的软件。

[是什么]

持续集成是一种软件开发实践,即团队开发成员经常集成他们的工作,通过每个成员每天至少集成一次,也就意味着每天可能会发生多次集成,每次的集成都通过自动化的构建(包括编译,发布,自动化测试)来验证,从而尽早发现集成错误。简单来说,就是持续的定时的在多个团队成员的工作中进行集成,并且给予反馈。

持续集成需要开发人员一天多次的将代码集成到主干,并进行自动化编译、测试等操作,由于这种频繁集成,以及集成后及时开始的编译和测试,可以有效避免我们在提交代码时没有进行必要检查而导致的错误,以及一些超出预期效果的更改,从而保证代码的质量。

由于这种及时性,如果在一次提交后项目集成失败,可以快速的在这次提交中查找问题所在,缩小了找问题的范围,从而减少了一些debug时间。同时如果按照这种实践,那么我们的主干代码时刻都是正确的,这样我们可以更频繁的交付。

[为什么]

一般规模较小的项目,对外部系统的依赖和服务调用很小,对于软件的集成不是问题。但是随着软件复杂度的增加,对集成提出了更多的要求,持续集成的好处就体现出来了。

1)对重复的编译发布等操作进行抽象,减少重复过程。

2)及早发现各种冲突和错误,减少风险。

3)任何时间、任何地点生成可部署的软件

[怎么做]

基本要求:要将这种实践付诸实际,需要一些必要的条件,如下

1.一个自动构建过程,包括自动编译、分发、部署和测试等

2.一个代码存储库,即需要版本控制软件来保障代码的可维护性,同时作为构建过程的素材库。

3.一个持续集成服务器。

自动化构建成过程,可帮助我们节省大量时间,完成这个过程的自动化后,在以后的开发过程中,我们需要做的,就是只是提交代码到版本库中,构建自动完成,基本不再需要人工干预。

代码仓库作为构建的素材库,构建所需的代码从代码库中获得。

最好有一台服务器单独作为持续集成服务器,一方面保证了环境的纯净,一方面不影响开发,而且持续集成服务器一般是随时准备开始构建的,所以一般也不关机。

1[首先要有统一的代码库,服务器不断从版本控制服务器上检查代码状态,看代码是否有更新。如果发现有代码更新,那么就从版本控制服务器下载最新的代码。等代码完全更新以后,调用自动化编译脚本,进行代码编译。然后运行所有的自动化测试,并且进行代码分析。如果其中任何一个步骤失败,就表示build失败,持续集成服务器会给予响应的反馈。每次代码提交之后,都会在持续集成服务器上触发一个定时构建,然后进行编译、部署。]

[原则]

1.开发人员必须及时向版本控制库中提交代码,也必须经常性地从版本控制库中更新代码到本地;

2.需要有专门的集成服务器来执行集成构建。根据项目的具体实际,集成构建可以被软件的修改来直接触发,也可以定时启动,如每半个小时构建一次;

3.必须保证构建的成功。如果构建失败,修复构建过程中的错误是优先级最高的工作。一旦修复,需要手动启动一次构建。

4.不更新构建失败的代码

开发人员及时的提交代码进行构建是符合上述实践的,及时拉取代码可以防止工作中的分支偏离主干分支太多。定时触发构建或者通过检测代码的修改情况在触发构建都是可以的,主要是根及时的构建新的代码。如果构建失败,则必要及时处理导致失败的问题,修复后重新构建。当然构建失败的代码就不要拉到本地了,会污染一个本来是可以运行的工作区。

[持续集成工具]

讲了这么多概念,有没一种工具把这种实践实现呢?当然有,常见的持续集成工具如下:

jenkins

travis

gitlab

buddybuild

仅列举了一些典型的,Jenkins 是传统型的工具,前身是 Hudson,04 年到现在已经有十多年的历史,后几个是最近几年出现的新一批,多少都和容器技术有点关系,这里我们主要介绍 Jenkins,因为这个工具比较常用,各种开发实践都可以通过大量的插件来组合实现,可定制性好很多。

jenkins

1jenkins是一个开源项目,提供了一种易于使用的持续集成系统,使开发者从繁杂的集成中解脱出来,专注于更为重要的业务逻辑实现上。同时 Jenkins 能实施监控集成中存在的错误,提供详细的日志文件和提醒功能,还能用图表的形式形象地展示项目构建的趋势和稳定性。— 维基百科

Jenkins 有哪些功能呢?

1.定时拉取代码并编译

2.静态代码分析

3.定时打包发布测试版

4.自定义额外的操作,如跑单元测试等

5.出错提醒

基本上都是持续集成实践中的要求和周边的一些实现措施,如提醒功能等,出错后及时提醒开发者修复,Jenkins 中通过配置 SMTP 配置信息(这个一般的邮件服务提供商都有提供),邮件模板等,创建事件触发器,在事件(如编译失败)发生时,及时发送邮件通知开发者,挺方便的。

Jenkins 有很多种触发构建的方式,如 webhook,定时更新代码等,同时可以在触发构建后执行自定义的构建操作,通过编辑自定义的构建脚本,几乎可以进行任何构建操作。

图片理解:

1)齿轮:如果将java/maven/ant/git/tomcat/jenkins等软件比喻为齿轮,如下图

2)两个软件在一起可以驱动另外一个软件,如下图

jenkins持续集成原理

3)如果把这些软件要集成在一起工作,那么这个软件就可以存在其他软件的中间来驱动各个软件工作,如下图:

4)jenkins就是类似中间那个齿轮,来驱动其他软件的集成一起工作,如下图

jenkins是一个开源软件项目,旨在提供一个开放易用的软件平台,使得持续集成编程可能。它的前身是hudson,是基于java开发的一种持续集成工具,它可以根据配置进行持续定期编译,运行相应的代码,将运行结果发送至邮件或者展示成报告等。

jenkins作为持续集成的标志性工具,自然是有了持续集成的众多优点。jenkins可以做一些自动化的build,只要我们把jenkins搭建成功,可以设置几分钟build一次,在定时自动build,验证单元测试,如果发生错误则把错误报告以email形式发送给项目模块负责人。

[宏观理解]

先来张图,大致理解下宏观:

jenkins持续集成原理

详细介绍:

jenkins持续集成原理
jenkins持续集成原理
jenkins持续集成原理
jenkins持续集成原理

至于关于邮件的配置,也是为了方便我们的开发和管理,jenkins很强大。

讲到这里,还是“啊呀呀,完蛋,还是有点不懂“的话,不如直接甩图(从网上copy下来的):

jenkins持续集成原理

这里是选择Gitlab作为git server。Gitlab的功能和Github差不多,但是是开源的,可以用来搭建私有git server,也提供非常强大的web GUI,比如开发者互相review源代码的时候就会很方便。

系统的工作流程大概分为以下几步:

1> 开发者将新版本push到git server (Gitlab)。

2> Gitlab随后触发jenkins master结点进行一次build。(通过web hook或者定时检测)

3> jenkins master结点将这个build任务分配给若干个注册的slave结点中的一个,这个slave结点根据一个事先设置好的脚本进行build。这个脚本可以做的事情很多,比如编译,测试,生成测试报告等等。这些原本需要手动完成的任务都可以交给jenkins来做。

4> 我们在build中要进行编译,这里使用了分布式编译器distcc来加快编译速度。

notes

jenkins的工作原理是先将源代码从gitlab中拷贝一份到本地,然后根据设置的脚本进行build。我们可以看出,整个系统的关键就是那个build脚本,用来告诉jenkins在一次集成中需要执行的任务。

不过我之后是用的Github作为git server。但其实差不多,先讲到这里,重点难点还是在之后jenkins的安装配置使用上。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • jenkins
    +关注

    关注

    0

    文章

    31

    浏览量

    5182
收藏 人收藏

    相关推荐

    技术解析 | 适用于TeamCity的Unreal Engine支持插件,提升游戏构建效率

    TeamCity 是一款强大的持续集成和部署服务器,面向以 DevOps 为中心的团队提供开箱即用的测试智能、构建问题的实时报告以及无与伦比的可扩展性。安装和部署 TeamCity,几分钟之内即可开始构建您的 DevOps 管道。TeamCity 提供本地部署和基于云的版本。
    的头像 发表于 02-19 16:12 189次阅读
    技术解析 | 适用于TeamCity的Unreal Engine支持插件,提升游戏构建效率

    Jenkins的安装教程

    Jenkins是一个开源的、提供友好操作界面的持续集成(CI)工具,广泛用于项目开发,具有自动化构建、测试和部署等功能。Jenkins用Java语言编写,可在Tomcat等流行的servlet容器中运行,也可独立运行。通常与版本
    的头像 发表于 02-06 10:04 221次阅读
    <b class='flag-5'>Jenkins</b>的安装教程

    持续改进工具之战:Smartsheet vs. Minitab Engage

    Smartsheet和Engage: 持续集成路线图:Smartsheet缺乏成功执行项目所需的预构建持续集成工作流。Engage在每
    的头像 发表于 01-24 14:40 116次阅读

    微服务容器化部署好处多吗?

    微服务容器化部署好处有很多,包括环境一致性、资源高效利用、快速部署与启动、隔离性与安全性、版本控制与回滚以及持续集成持续部署。这些优势助力应用可靠稳定运行,提升开发运维效率,是现代软件架构的优质选择。UU云小编认为微服务容器化部署好处主要体现在以下几个方面:
    的头像 发表于 01-17 10:22 100次阅读

    基于 Docker 与 Jenkins 实现自动化部署

    前言 重塑自动化部署新高度,Docker 携手 Jenkins,在华为云 Flexus X 云服务器的加持下,引领持续集成与部署的新纪元。Flexus X 以其卓越的性能、灵活的资源配置和高效的成本
    的头像 发表于 01-07 17:25 245次阅读
    基于 Docker 与 <b class='flag-5'>Jenkins</b> 实现自动化部署

    Jenkins 与 SonarQube 集成部署,自动化代码质量监控

    的性能表现,为 Jenkins 与 SonarQube 的集成部署提供强大支撑。在 Flexus X 的助力下,自动化代码扫描与质量问题即时反馈成为可能,显著提升团队开发效率与软件质量。立即体验华为云
    的头像 发表于 01-07 17:24 309次阅读
    <b class='flag-5'>Jenkins</b> 与 SonarQube <b class='flag-5'>集成</b>部署,自动化代码质量监控

    基于SOA自动驾驶整车及运营系统架构

    Architecture,SOA)设计思想和理念,设计、打造可持续集成、灵活配置和持续升级的自动驾驶整车乃至整个运营系统,可为客户提供面向封闭区域运营的完整自动化解决方案。
    的头像 发表于 01-06 17:00 557次阅读
    基于SOA自动驾驶整车及运营系统架构

    基于SOA自动驾驶整车及运营系统架构

    ,设计、打造可持续集成、灵活配置和持续升级的自动驾驶整车乃至整个运营系统,可为客户提供面向封闭区域运营的完整自动化解决方案。,车辆电子电气架构开发模式遇到了巨大的挑战。
    的头像 发表于 01-06 16:06 27次阅读
    基于SOA自动驾驶整车及运营系统架构

    云服务器Flexus X实例,Docker集成搭建Jenkins CI/CD平台

    Jenkins 是一个开源的自动化服务器,用于持续集成(CI)和持续交付(CD)软件项目。它允许开发人员在软件开发过程中自动化各种任务,如构建、测试和部署,从而提高开发效率和软件质量。
    的头像 发表于 12-29 15:43 181次阅读
    云服务器Flexus X实例,Docker<b class='flag-5'>集成</b>搭建<b class='flag-5'>Jenkins</b> CI/CD平台

    Flexus X 实例 Docker+Jenkins+gitee 实现 CICD 自动化部署 - 解放你的双手~

    这一前沿解决方案,为您的 C# Web API 项目注入前所未有的敏捷动力。通过集成 Docker 容器化技术、Jenkins 持续集成/持续部署(CICD)平台,以及 Gitee 高
    的头像 发表于 12-26 18:19 246次阅读
    Flexus X 实例 Docker+<b class='flag-5'>Jenkins</b>+gitee 实现 CICD 自动化部署 - 解放你的双手~

    devops使用最广泛的集成工具盘点

    devops使用最广泛的集成工具包括GitLab(全栈DevOps平台)、Jenkins(CI/CD自动化服务器)、Docker(容器化技术)、Kubernetes(容器编排平台)、Ansible
    的头像 发表于 11-26 13:48 268次阅读

    AUTOSAR架构下,持续集成CI的最佳实践

    随着汽车电子技术的快速发展,汽车软件的复杂性与日俱增,如何确保软件开发的高效性与稳定性成为了一个关键问题。为了解决这个问题,许多汽车企业和供应商逐渐引入了AUTOSAR架构,并在此基础上构建了持续集成
    的头像 发表于 10-24 08:06 612次阅读
    AUTOSAR架构下,<b class='flag-5'>持续集成</b>CI的最佳实践

    Jenkins常见问题分析和解决方案

    替换原因:进入 Manage Jenkins -》 Manage Plugin,发现Updates tab页没数据,报There were errors checking the update
    的头像 发表于 10-22 11:07 507次阅读
    <b class='flag-5'>Jenkins</b>常见问题分析和解决方案

    Perforce静态分析工具2024.2新增功能:Helix QAC全新CI/CD集成支持、Klocwork分析引擎改进和安全增强

    实现持续合规性现代软件开发实践要求开发团队具备适应性,在确保代码质量和可靠性的同时,优先考虑灵活性和协作性。在软件开发流程中实施持续集成(CI)和持续交付(CD)流
    的头像 发表于 10-08 16:22 361次阅读
    Perforce静态分析工具2024.2新增功能:Helix QAC全新CI/CD<b class='flag-5'>集成</b>支持、Klocwork分析引擎改进和安全增强

    使用MATLAB、Simulink和Polyspace加速软件定义汽车开发

    开发软件定义汽车 (SDV) 时,开发团队必须具备新的能力,例如进行连续的软件发布,减少软件更改的交付周期以及尽可能减少部署失败。同时,平台团队需要为车载计算机和区域控制器创建新软件开发环境,设置持续集成/持续交付 (CI/CD) 系统,并协助系统和软件开发人员之间的协作
    的头像 发表于 09-05 09:57 625次阅读
    使用MATLAB、Simulink和Polyspace加速软件定义汽车开发