Jenkins与实现CI/CD
Jenkins与实现CI/CD
Jenkins的主要开发者是川口耕介, 是在MIT许可证下发布的自由软件。
Jenkins是一个用Java编写的开源的持续集成工具。在与Oracle发生争执后,项目从Hudson项目独立。
Jenkins提供了软件开发的持续集成服务。它运行在Servlet容器中(例如Apache Tomcat)。
Jenkins支持软件配置管理(SCM)工具(包括AccuRev SCM、CVS、Subversion、Git、Perforce、Clearcase和RTC),可以执行基于Apache Ant和Apache Maven的项目,以及任意的Shell脚本和Windows批处理命令。
Jenkins功能
1、持续的软件版本发布/测试项目。
2、监控外部调用执行的工作。
Jenkins概念
Jenkins是一个功能强大的应用程序,允许持续集成和持续交付项目,无论用的是什么平台。
这是一个免费的开源项目,可以处理任何类型的构建或持续集成。集成Jenkins可以用于一些测试和部署技术。Jenkins是一种软件允许持续集成。
Jenkins目的
① 持续、自动地构建/测试软件项目。
② 监控软件开发流程,快速问题定位及处理,提高开发效率。
Jenkins特性
① 开源的java语言开发持续集成工具,支持CI,CD。
② 易于安装部署配置:可通过yum安装,或下载war包以及通过docker容器等快速实现安装部署,可方便web界面配置管理。
③ 消息通知及测试报告:集成RSS/E-mail通过RSS发布构建结果或当构建完成时通过e-mail通知,生成JUnit/TestNG测试报告。
④ 分布式构建:支持Jenkins能够让多台计算机一起构建/测试。
⑤ 文件识别:Jenkins能够跟踪哪次构建生成哪些jar,哪次构建使用哪个版本的jar等。
⑥ 丰富的插件支持:支持扩展插件,你可以开发适合自己团队使用的工具,如git,svn,maven,docker等。
产品发布流程
产品设计成型 -> 开发人员开发代码 -> 测试人员测试功能 -> 运维人员发布上线
持续集成 持续交付 持续布署 (CI/CD)
持续集成(Continuous Integration),一种软件工程流程,将所有工程师对于软件的工作复本,每天集成数次到共用主线(mainline)上。
这个名称最早由葛来迪·布区(Grady Booch)在他的布区方法中提出,但是他并没有提到要每天集成数次。 之后成为极限编程(extreme
programming,缩写为XP)的一部分。在测试驱动开发(TDD)的作法中,通常还会搭配自动单元测试。
持续集成的提出,主要是为了解决软件进行系统集成时面临的各项问题,极限编程称这些问题为集成地狱(integration hell)。
持续集成主要是强调开发人员提交了新代码之后,立刻进行构建、(单元)测试。根据测试结果,确定新代码和原有代码能否正确地集成在一起。
简单来讲就是:频繁地(一天多次)将代码集成到主干。
持续集成目的在产生以下效益如:
• 及早发现集成错误且由于修订的内容较小所以易于追踪,这可以节省项目的时间与成本。
• 避免发布日期的前一分钟发生混乱,当每个人都会尝试为他们所造成的那一点点不兼容的版本做检查。
• 当单元测试失或发生错误,若开发人员需要在不除错的情况下还原代码库到一个没有问题的状态,只需要放弃一小部分的更改 (因为集成的次数频繁)。
• 让 “最新” 的程序可保持可用的状态供测试、展示或发布用。
• 频繁的提交代码会促使开发人员创建模块化,低复杂性的代码。
• 防止分支大幅偏离主干。如果不是经常集成,主干又在不断更新,会导致以后集成的难度变大,甚至难以集成。
持续交付(Continuous Delivery),
是一种软件工程手法,让软件产品的产出过程在一个短周期内完成,以保证软件可以稳定、持续的保持在随时可以释出的状况。
它的目标在于让软件的构建、测试与释出变得更快更频繁。这种方式可以减少软件开发的成本与时间,减少风险。
持续交付在持续集成的基础上,将集成后的代码部署到更贴近真实运行环境的「类生产环境」(production-like environments)中。
比如,我们完成单元测试后,可以把代码部署到连接数据库的Staging 环境中更多的测试。如果代码没有问题,可以继续手动部署到生产环境中。
持续部署(Continuous Deployment),是持续交付的下一步,指的是代码通过评审以后,自动部署到生产环境。
持续部署即在持续交付的基础上,把部署到生产环境的过程自动化。
简单总结
持续集成(Continuous Integration, CI): 代码合并,构建,部署,测试都在一起,不断地执行这个过程,并对结果反馈。
持续交付(Continuous Deployment, CD): 将产品部署到测试环境、预生产环境, 手动(选择性的)布署到生产环境。
持续部署(Continuous Delivery, CD): 将最终产品自动布署到生成环境, 给用户使用。
持续交付与持续部署
持续交付意味着所有的变更都可以被部署到生产环境中,但是出于业务考虑,可以选择不部署, 人为控制。
持续部署意味着所有的变更都会被自动部署到生产环境中,自动部署。 如果要实施持续部署,必须先实施持续交付.
持续交付与 DevOps
持续交付与DevOps的含义很相似, 所以经常被混淆, 但是它们是不同的两个概念。 DevOps的范围更广, 它以文化变迁为中心,
特别是软件交付过程所涉及的多个团队之间的合作(开发,运维,QA,管理部门等), 并且将软件交付的过程自动化。
持续交付是一种自动化交付的手段,关注点在于将不同的过程集中起来,并且更快、更频繁地执行这些过程。
因此,DevOps可以是持续交付的一个产物,持续交付直接汇入DevOps。
参考: What is DevOps? | Opensource.com
实现CI/CD可分为以下五步:
CI/CD 框架
源代码控制管理
自动化构建工具
应用服务器
代码覆盖测试
CI/CD 框架
CI/CD 工具有很多,其中Jenkins是应用最为广泛的一种。 Jenkins,
是一个基于 Java 的 MIT 许可下的开源 CI/CD
工具,它是推广 DevOps 运动的工具,并已成为了事实标准。
源代码控制管理
CI/CD 工具与源代码控制管理(SCM)工具集成是最佳实践之一。 在众多的 SCM 工具中, Git 是最标准恰当的。在此极力推荐使用Git。
自动化构建工具
有了 SCM之后,我们可以很好的管理我们的源代码了,但要想让它成为一个网页应用,还要将其编译并打包成可部署的包或可执行程序(解释类语言不用)。
自动化构建工具的目标:将源代码构建成某种想要的格式,并且将清理、编译、测试、部署到某个位置这些任务自动化。
构建工具会根据编程语言的不同而不同,下面是一些常用语言对应的开源构建工具: Java: Maven, Ant, Gradle, Bazel
JavaScript: Grunt, Gulp Ruby: Buildr, Rake Python: A-A-P, SCons,
BitBake C#: Cake …
应用服务器
构建出应用之后,还需要应用服务器来发布我们的应用,以下为常见的网页应用服务器: Java:Tomcat, Jetty, WildFly
… Python: Django, Tornado … JavaScript: Node.js
代码覆盖测试
实现代码测试件可能是另一个麻烦的需求,但是开发者需要尽早地捕捉程序中的所有错误并提升代码质量来保证最终用户满意度。
幸运的是,这里有许多开源工具来测试你的代码并提出改善质量的建议。甚至更好的,大部分 CI/CD 工具能够集成这些工具并将测试过程自动化进行。
代码测试分为两个部分:“代码测试框架”帮助进行编写与运行测试,“代码质量改进工具”帮助提升代码的质量。
代码测试框架:
Java: JUnit, EasyMock, Mockito, PowerMock Python: Pytest, Hypothesis, Tox
代码质量改进工具:
Java: Cobertura, CodeCover, Emma, JaCoCo Python: Coverage.py,
Hypothesis, Tox JavaScript: Jasmine, Karma, Mocha, Jest
————————————————
版权声明:本文为CSDN博主「wenqing_ruyu」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/wenqing_ruyu/article/details/126067740