设为首页 - 加入收藏 华夏网 ()- 云主机,资讯,互联网,人工智能,云计算,大赢家论坛,区块链,VR,站长网!
热搜: 2019 系统 统一 2017
当前位置: 主页 > 电商 > 正文

基于Docker的Jenkins持续交付实践

发布时间:2021-01-13 21:15 所属栏目:[电商] 来源:网络整理
导读:《基于Docker的Jenkins持续交付实践》要点: 本文介绍了基于Docker的Jenkins持续交付实践,希望对您有用。如果有疑问,可以联系我们。 讲师介绍 : 叶峰 有容云资深前端开发工程师 现负责有容云容器云平台Web架构设计和CI(持续集成)产品的研发 拥有丰富的Web

《基于Docker的Jenkins持续交付实践》要点:
本文介绍了基于Docker的Jenkins持续交付实践,希望对您有用。如果有疑问,可以联系我们。

讲师介绍:叶峰

有容云资深前端开发工程师

  • 现负责有容云容器云平台Web架构设计和CI(持续集成)产品的研发
  • 拥有丰富的Web前端开发经验.

主题简介:

1.Jenkins pipeline基础概念

2.Jenkins pipeline如何带来工作便利

3.基于容器的Jenkins CI流程

4.Jenkins、Docker、Kubernetes整合的集成部署

传统交付方案

传统我们的项目开发模式是产品调研提出需求,开发团队研究决定开发方案选型.然后开始一个周期的开发,模块开发完成之后开始模块间的联调.联调结束之后打包交付给测试团队.测试团队,系统测试或自动化测试,然后提交bug,开发团队修复bug,周而复始.传统的模式中,存在着较多的不确定因素.例如,开发环境、编译环境、测试环境、生产环境,等不确定因素.人为介入打包中的不确定因素,缺乏单元测试和自动化测试的整合.从而导致的结果是,开发-测试-修复的周期较长,而且很多小的问题完全可以由单元测试进行覆盖.

持续交付

持续交付并不是某个特定的软件,而是一个结果.这个结果要求团队可以随时的发布一个新的准确版本,而且要求在编译发布的过程中进行自动化测试,通过自动化测试可以及时地发现并定位存在的bug,修复bug之后再进行快速的发布到测试环境,测试团队直接进行测试.与传统模式的区别在于持续交付可以提前发现bug的存在和快速修复而不必等到测试人员的介入之后才发现.持续交付分解出来就是“持续”和“交付”.

持续:持续要求任何时,候任何情况都能进行准确的发布,做到准确的发布需要注意以下几个关键点.

1.持续应该是一个周期性的,可以是每天的某个时间点,也可以是某次代码的提交,或者某次人为触发.所以人工进行构建是不可能的,需要自动化的构建,自动化要求构建的任何一个流程都必须以脚本的形式运行,代码检出、代码构建、各模块代码单元测试、集成测试、UI自动化测试等.

2.发布的程序版本不允许是各个模块在开发环境编译出一个版本作为交付,而要求在一个纯净的编译环境中进行构建.

3.构建的过程应该要求最大可能的固化,例如操作系统的版本,构建环境的版本,相关的依赖等.

4.避免从网络获取相关的文件,这点以nodejs为开发或编译的项目尤其重要,安装node的依赖包总是一个漫长的过程,就算有国内的源,一般的项目也需要一两分钟的node依赖包,这不符合快速构建.

交付 :?在持续编译的过程,使用自动化已经可以避免大多数的错误了.但是还是需要人为介入的系统测试,毕竟自动化的测试一般只能覆盖到70%左右.

根据我们团队内部推广这种工作方式的效果来看,持续集成确实让我们工作便利了许多,每次代码的构建和自动化测试让我们及时发现存在的bug.好的工作模式也需要团队成员的遵守,团队成员应该积极的拥抱这种工作方式,团队成员需要做好以下几点.

1.使用版本工具例如git.git有强大的版本回溯,成员每次完成一个小的功能点进行代码提交.合并到master分支,持续交付工具应该配置为代码更新触发.团队内部应该等到持续交付流程结束之后,确认编译、自动化测试通过之后方可进行下一个版本的提交,这样容易定位bug.而不会导致这次bug影响团队内其他成员的工作.

2.主分支的代码bug不应该存留时间过长,避免团队内其他成员合并代码的时候引入其他问题.

3.测试驱动开发,任何一个新的功能开发都应该先写好单元测试脚本,并积极更新自动化测试脚本.并且积极地拥抱测试,虽然你明白这个测试不通过的问题并不会引起很大的系统性问题,但是还是应该进行修复而不是想方设法的跳过这个自动化测试.

4.临近下班的时候不要提交代码,这主要是因为遵守第2点.

一个解决方案

使用Docker

Docker已经越来越火,CICD和Devops也是Docker一个重要的场景.在持续交付中使用Docker有一下优点.

  1. Docker强大的环境隔离性可以将环境和程序打包在一起,测试、运维,人员无需知道我们的程序是如何配置的,只需要一条docker 的命令就可以将我们的程序运行起来,这也更加容易实现持续部署.
  2. 减少编译环境的污染,因为Docker天然的隔离性,也避免了传统编译环境难以配置多套编译环境的问题.在基于Docker的持续发布中,我们可以在同一台宿主机上同时编译不同版本的Java项目,不同版本的Python项目,而无需任何配置,镜像也只是从docker hub中获取.

持续集成

在持续集成方面,我们选择Jenkins.Jenkins是一款开源软件,拥有众多优秀的插件,依靠这些插件,我们可以完成一些周期、繁琐、复杂的任务.例如我们今天分享的持续发布,虽然Jenkins解决了我们繁琐复杂周期性的操作,但是没有解决我们在多种环境下编译构建的需求.而这个场景正是Docker的强项.通过Jenkins的pipeline我们可以实现代码检出、单元测试、编译、构建、发布、测试等流程的自动化,而最终通过Jenkins的Docker插件将产出物构建成镜像,方便部署到Docker环境.

持续部署

持续集成让我们新的代码源源不断的构建成了镜像,这些镜像经历了单元测试,自动化测试,但还没有接受过测试团队的严格测试.Jenkins是一个强大的持续集成工具,然而持续部署并不是Jenkins的强项,但是Jenkins拥有很多强大的插件.而且我们持续集成产出的是镜像,所以持续的部署,我们只需要将镜像运行起来,或者利用第三方的容器管理平台提供的API进行部署.

1.本地部署应用到Docker.

本地部署到Docker容器可以使用Jenkins的docker插件,下面会介绍.

2.部署到远程主机的Docker、Appsoar.

Docker和Appsoar都支持开启API调用.通过现有的API我们可以运行我们生成镜像版本.从而达到持续的部署最新版本.

3.部署到kubernetes.

kubernetes除了可以通过API调用还可以在jenkins中配置kubectl的方式创建或更新deployments.

Docker中运行Jenkins

Docker部署Jenkins的方式简单方便,下面我们介绍用Docker的方式运行Jenkins.

【免责声明】本站内容转载自互联网,其相关言论仅代表作者个人观点绝非权威,不代表本站立场。如您发现内容存在版权问题,请提交相关链接至邮箱:bqsm@foxmail.com,我们将及时予以处理。

网友评论
推荐文章